Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
Нужно чтобы программа не пошла в свободное плаванье.
Программа использует MS SQL Server 2008R2 Express
Не инсталируется.
Думаю сделать в ней привязку к экземпляру установленного сервера.
Пересмотрел разные варианты с данными из sys.*
Но пока не нашел ничего лучше
select schemadate from sysservers это вроде дата установки сервера.

Думал может чего интересного в реестре Оси прописано но
SELECT * FROM sys.dm_server_registry
выдает Invalid object name 'sys.dm_server_registry'.

Есть идеи получше как 100% различать серверы на которых может быть развернута база?
19 янв 17, 09:51    [20121437]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Вы хотите что бы программа проверяла версию ms sql ?
19 янв 17, 10:40    [20121633]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
MSSQLAndDotNet,

Не версию.
Пример.
Берем 2 компа с Win7 64, ставим из одного дистрибутива MS SQL Server 2008R2 Express
Разворачиваем базу в один и тот же каталог C:/SQL на обоих компах под одним и тем же именем TestDB

Нужно найти такой параметр на сервере и прописать в клиента чтобы цепляясь к 1 компу, он работал, а при подключении к 2му компу и любой последующей увтановке сервера с базой, он не работал.
19 янв 17, 11:00    [20121764]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Например, зацепиться за database_guid из sys.database_recovery_status
19 янв 17, 11:38    [20121974]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
Сон Веры Павловны
Например, зацепиться за database_guid из sys.database_recovery_status

Спасибо за идею.
Я ищу подобный GUID но создаваемый 1 раз либо за время жизни сервера либо базы.
А этот меняется при восстановлении из бэкапа.

database_guid
Используется для связывания всех файлов базы данных. Чтобы база данных запускалась как ожидается, все ее файлы должны содержать этот идентификатор GUID в заголовочной странице. Только одна база данных должна иметь этот идентификатор GUID, но при копировании и прикреплении баз данных могут быть созданы копии. Инструкция RESTORE всегда формирует новый идентификатор GUID при восстановлении базы данных, которая еще не существует.
https://msdn.microsoft.com/ru-ru/library/ms178575.aspx
19 янв 17, 11:45    [20122018]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
Господин Уэф!
Сон Веры Павловны
Например, зацепиться за database_guid из sys.database_recovery_status

Спасибо за идею.
Я ищу подобный GUID но создаваемый 1 раз либо за время жизни сервера либо базы.
А этот меняется при восстановлении из бэкапа.

database_guid
Используется для связывания всех файлов базы данных. Чтобы база данных запускалась как ожидается, все ее файлы должны содержать этот идентификатор GUID в заголовочной странице. Только одна база данных должна иметь этот идентификатор GUID, но при копировании и прикреплении баз данных могут быть созданы копии. Инструкция RESTORE всегда формирует новый идентификатор GUID при восстановлении базы данных, которая еще не существует.
https://msdn.microsoft.com/ru-ru/library/ms178575.aspx

И где же здесь написано, что этот guid меняется при каждом восстановлении? В процитированном речь только о формировании нового guid при восстановлении из бэкапа базы, которой нет на сервере. Можете сами убедиться:
use master
go
if db_id('guidtest') is not null drop database guidtest;
create database guidtest;
select database_guid from sys.database_recovery_status s where database_id=db_id('guidtest');
backup database guidtest to disk = 'D:\Trash\guidtest.bak' WITH FORMAT;
restore database guidtest from disk='D:\Trash\guidtest.bak' with replace;
select database_guid from sys.database_recovery_status s where database_id=db_id('guidtest');


database_guid
------------------------------------
2B8BC8D0-82A5-49A5-96EB-74A6878988B5

(1 row(s) affected)

Processed 336 pages for database 'guidtest', file 'guidtest' on file 1.
Processed 3 pages for database 'guidtest', file 'guidtest_log' on file 1.
BACKUP DATABASE successfully processed 339 pages in 0.270 seconds (9.809 MB/sec).
Processed 336 pages for database 'guidtest', file 'guidtest' on file 1.
Processed 3 pages for database 'guidtest', file 'guidtest_log' on file 1.
RESTORE DATABASE successfully processed 339 pages in 0.172 seconds (15.397 MB/sec).
database_guid
------------------------------------
2B8BC8D0-82A5-49A5-96EB-74A6878988B5

(1 row(s) affected)
19 янв 17, 12:29    [20122225]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
Сон Веры Павловны,

Не то написал,
Проблема не в Restore, а в
"Только одна база данных должна иметь этот идентификатор GUID, но при копировании и прикреплении баз данных могут быть созданы копии"
Получается, что можно остановить сервер, перенести файлы и прикрепить их к другому серверу.
Сейчас проверю.
19 янв 17, 12:35    [20122263]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
Проверил несколкьо разных полей и даты и guid. При переносе на другой сервер отсоединением/подключением. Они не меняются.
Более того этот GUID даже у системных баз одинаковый на 2008 и 2012 сервере
19 янв 17, 12:51    [20122349]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Господин Уэф!,

например так

имя машины + имя инстанса
+ мак адрес (хоте это наверное уже перебор :) )
19 янв 17, 13:06    [20122408]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
komrad
Member

Откуда:
Сообщений: 5252
Господин Уэф!,

https://sqlandme.com/2011/05/09/accessing-registry-using-xps-tsql/

http://stackoverflow.com/questions/99880/generating-a-unique-machine-id
19 янв 17, 14:50    [20123065]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
MSSQLAndDotNet
имя машины + имя инстанса
+ мак адрес (хоте это наверное уже перебор :) )
а если это будет виртуалка?
19 янв 17, 15:29    [20123309]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Господин Уэф!
Нужно чтобы программа не пошла в свободное плаванье.
имхо, делайте saas/paas, остальное "утопия".
19 янв 17, 15:30    [20123319]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
any user
Guest
Господин Уэф!
вот здесь MSSQLAndDotNet уже предложил идею.
для того, чтобы ограничить доступ к серверу можно установить ограничения не в программе, а на сервере. Напр.. с пом. HOST_NAME().
19 янв 17, 15:50    [20123427]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
MSSQLAndDotNet
Господин Уэф!,
например так
имя машины + имя инстанса

Не годится.
Какие проблемы назвать комп так же и именованный экземпляр поставить с тем же именем?

мак адрес (хоте это наверное уже перебор :) )

Мак адрес компа где запускается клиент негодится. нужно мак сервера. Но sys.dm_server_registry почему-то не доступен, об этом в первом сообщении написал.
20 янв 17, 06:35    [20125357]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
komrad
Господин Уэф!,
https://sqlandme.com/2011/05/09/accessing-registry-using-xps-tsql/
http://stackoverflow.com/questions/99880/generating-a-unique-machine-id

По первой ссылке взял то что нужно, спасибо.

Набросал вот такую штуку.

DECLARE @regName NVARCHAR(100), @iname nvarchar(250), @k nvarchar(max), @uid nvarchar(250)
set @iname=cast( isnull(SERVERPROPERTY('instanceName'),'(По умолчанию)') as varchar)

EXEC   master.dbo.xp_regread
       @rootkey      = N'HKEY_LOCAL_MACHINE',
       @key          = N'SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL',
       @value_name   = @iname, 
       @value        = @regName output
       
set @k='SOFTWARE\Microsoft\Microsoft SQL Server\'+@regName+'\Setup\SQL_Engine_Core_Inst'

EXEC   master.dbo.xp_regread
       @rootkey      = N'HKEY_LOCAL_MACHINE',
       @key          = @k,
       @value_name   = 'ProductCode', 
       @value        = @uid output
SELECT (@iname)InstanceName, (SERVERPROPERTY('ProductVersion'))'Версия продукта' , (@regName)'Ветка реестра' ,replace(replace(@uid,'{',''),'}','') ProductCode_GUID 
20 янв 17, 07:42    [20125414]     Ответить | Цитировать Сообщить модератору
 Re: Нужно привязать программу к установленному экземпляру сервера.  [new]
Господин Уэф!
Member

Откуда:
Сообщений: 269
поправка , вместо '(по умолчанию)' просто ''
20 янв 17, 07:52    [20125425]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить