Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Добавете вход за свързан сървър в SQL Server (пример за T-SQL)

В тази статия създавам вход за свързан сървър в SQL Server. В този случай използвам Transact-SQL (за разлика от използването на GUI като SSMS).

За да създадете вход за свързан сървър, използвайте sp_addlinkedsrvlogin системна съхранена процедура.

Синтаксис

Синтаксисът е така:

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'   
     [ , [ @useself = ] { 'TRUE' | 'FALSE' | NULL } ]   
     [ , [ @locallogin = ] 'locallogin' ]   
     [ , [ @rmtuser = ] 'rmtuser' ]   
     [ , [ @rmtpassword = ] 'rmtpassword' ]

Следващият пример показва как работи това. За по-подробно обяснение на всеки аргумент вижте официалната документация на Microsoft.

Пример 1 – Добавяне на вход за свързания сървър

Ето пример за добавяне на вход в SQL Server, наречен Maggie, за свързан сървър, наречен Homer:

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Изпълнете това на локалния сървър, след като създадете свързания сървър. Ще ви трябва съответни данни за вход със същите идентификационни данни на действителния отдалечен сървър.

Пример 2 – Включете свързания сървър

За пълнота, ето го отново, но този път първо създавам свързания сървър:

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2',
    @catalog='Music';

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin=NULL, 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Докато действителният (отдалечен) свързан сървър има вход със същите идентификационни данни, локалният сървър ще може да влезе в свързания сървър.

Пример 3 – Добавете вход/Потребител на отдалечения сървър

Както бе споменато, ще трябва да се уверите, че има съответно вход на отдалечения сървър. Ще трябва също така да се уверите, че това влизане се съпоставя с потребител на база данни с подходящите разрешения.

Така че в този случай бихме могли да създадем вход на отдалечения сървър, като прескочим към отдалечения сървър и изпълним това:

CREATE LOGIN Maggie
    WITH PASSWORD = 'BigStrong#Passw0rd';

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Това създава вход, наречен Maggie, и съответен потребител на базата данни, наречен Maggie. Той също така предоставя SELECT разрешения за Maggie за базата данни за музика.

След като направих това, всички разпространени заявки, използващи това влизане, ще бъдат ограничени до базата данни за музика.

Алтернатива на използването на GRANT SELECT ON DATABASE , е да добавите потребителя към db_datareader фиксирана роля в базата данни или може би на персонализирана роля.

Ако сте създали свързания сървър, преди да създадете потребители за влизане и база данни на отдалечения сървър, може да се наложи да махнете свързания сървър и да го създадете отново. Ако е така, можете да го пуснете по следния начин:

EXEC sp_dropserver 'Homer', 'droplogins';

След като бъде изхвърлен, можете да създадете свързания сървър и свързаните с него данни за влизане отново.

Наистина ли ми трябва влизане в свързан сървър?

Възможно е дори да не е необходимо да добавяте данни за вход, както в горния пример.

Когато за първи път създадете свързан сървър в SQL Server, автоматично се създава съпоставяне по подразбиране между всички данни за влизане на локалния сървър и отдалечени входове на свързания сървър. SQL Server използва идентификационните данни на локалния вход, когато се свързва към свързания сървър от името на входа.

Така че, ако вашето локално влизане има съответни данни за вход на свързания сървър, със същите идентификационни данни и има съответните разрешения, можете да започнете. Няма нужда да добавяте вход за свързания сървър.

Като каза това, може да имате други причини да добавите отделно потребителско име, като например добавянето му за други потребители.

Може също да искате да създадете карта за влизане за един локален потребител, като в този случай можете да използвате @locallogin аргумент, за да посочите локалното влизане, което да бъде съпоставено.

Вижте как работят влизанията на свързани сървъри за примери за различни локални влизания, които се опитват да осъществят достъп до данните за влизане в свързан сървър при различни сценарии.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате празни пространства в нулеви стойности, като използвате SQL Server?

  2. Защо няма прозоречни функции в клаузите where?

  3. Каква е най-добрата практика за вмъкване на запис, ако той все още не съществува?

  4. Преобразувайте „smalldatetime“ в „datetime2“ в SQL Server (примери за T-SQL)

  5. Нови функции на SQL Server 2019