Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dodaj logowanie do serwera połączonego w programie SQL Server (przykład T-SQL)

W tym artykule tworzę login do połączonego serwera w SQL Server. W tym przypadku używam Transact-SQL (w przeciwieństwie do korzystania z GUI, takiego jak SSMS).

Aby utworzyć login dla połączonego serwera, użyj sp_addlinkedsrvlogin systemowa procedura składowana.

Składnia

Składnia wygląda tak:

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

Poniższy przykład pokazuje, jak to działa. Bardziej szczegółowe wyjaśnienie każdego argumentu można znaleźć w oficjalnej dokumentacji firmy Microsoft.

Przykład 1 – Dodaj login do połączonego serwera

Oto przykład dodawania loginu SQL Server o nazwie Maggie dla połączonego serwera o nazwie Homer:

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

Uruchom to na serwerze lokalnym po utworzeniu połączonego serwera. Będziesz potrzebować odpowiedniego loginu z tymi samymi danymi uwierzytelniającymi na rzeczywistym serwerze zdalnym.

Przykład 2 – Uwzględnij serwer połączony

W trosce o kompletność, oto znowu, ale tym razem najpierw tworzę połączony serwer:

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';

Dopóki rzeczywisty (zdalny) serwer połączony ma login z tymi samymi danymi uwierzytelniającymi, serwer lokalny będzie mógł zalogować się do serwera połączonego.

Przykład 3 – Dodaj login/użytkownika na zdalnym serwerze

Jak wspomniano, musisz upewnić się, że na zdalnym serwerze istnieje odpowiedni login. Musisz również upewnić się, że ten login jest mapowany na użytkownika bazy danych z odpowiednimi uprawnieniami.

Więc w tym przypadku możemy utworzyć login na zdalnym serwerze, przeskakując na zdalny serwer i uruchamiając to:

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

USE Music;
CREATE USER Maggie FOR LOGIN Maggie;

GRANT SELECT ON DATABASE::Music TO Maggie; 

Tworzy to login o nazwie Maggie i odpowiadający mu użytkownik bazy danych o nazwie Maggie. Przyznaje również SELECT uprawnienia Maggie do bazy danych muzyki.

Teraz, kiedy to zrobiłem, wszelkie zapytania rozproszone używające tego loginu będą ograniczone do bazy danych muzyki.

Alternatywa dla użycia GRANT SELECT ON DATABASE , jest dodanie użytkownika do db_datareader stała rola bazy danych, a może rola niestandardowa.

Jeśli serwer połączony został utworzony przed utworzeniem loginów i użytkowników bazy danych na serwerze zdalnym, może być konieczne usunięcie serwera połączonego i utworzenie go ponownie. Jeśli tak, możesz go upuścić w ten sposób:

EXEC sp_dropserver 'Homer', 'droplogins';

Po upuszczeniu możesz ponownie utworzyć połączony serwer i powiązany z nim login.

Czy naprawdę potrzebuję logowania do serwera połączonego?

Możliwe, że nie musisz nawet dodawać loginu, jak w powyższym przykładzie.

Kiedy po raz pierwszy tworzysz połączony serwer w SQL Server, automatycznie tworzone jest domyślne mapowanie między wszystkimi logowaniami na serwerze lokalnym a zdalnymi logowaniami na serwerze połączonym. SQL Server używa poświadczeń logowania lokalnego podczas łączenia się z serwerem połączonym w imieniu logowania.

Więc jeśli twój lokalny login ma odpowiedni login na połączonym serwerze, z tymi samymi poświadczeniami i ma odpowiednie uprawnienia, możesz iść. Nie ma potrzeby dodawania loginu do połączonego serwera.

Powiedziawszy to, możesz mieć inne powody, aby dodać oddzielny login, na przykład dodanie go dla innych użytkowników.

Możesz także utworzyć mapowanie logowania dla pojedynczego użytkownika lokalnego, w takim przypadku możesz użyć @locallogin argument, aby określić lokalny login do zmapowania.

Zobacz Jak działają logowanie na połączonych serwerach, aby zapoznać się z przykładami różnych lokalnych loginów próbujących uzyskać dostęp do połączonego serwera w różnych scenariuszach.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odpowiednik LIMIT i OFFSET dla SQL Server?

  2. Edytuj wiersze / rekordy tabeli w SQL Server Management Studio (SSMS) — samouczek SQL Server / samouczek TSQL, część 18

  3. Zalety wydajności SQL Server 2016 Enterprise Edition

  4. Czy kończy się używanie zamyka otwarte połączenie SQL?

  5. Przekonanie do regularnego serwisowania serwera SQL