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

Jak włączyć/wyłączyć dostęp do danych w SQL Server (przykład T-SQL)

SQL Server ma opcję konfiguracji „dostępu do danych”, która włącza i wyłącza połączony serwer dla dostępu do zapytań rozproszonych.

Jeśli kiedykolwiek pojawi się błąd „Serwer nie jest skonfigurowany do dostępu do danych”, prawdopodobnie będziesz musiał włączyć dostęp do danych dla serwera połączonego, na którym próbujesz uruchomić zapytanie rozproszone. I odwrotnie, może się zdarzyć, że będziesz musiał wyłączyć dostęp do danych.

Aby włączyć lub wyłączyć dostęp do danych, użyj sp_serveroption systemowa procedura składowana. Wykonaj go na serwerze, z którego zamierzasz uruchamiać zapytania rozproszone. Poniższy przykład pokazuje, jak to zrobić.

Przykład 1 – Włącz dostęp do danych

Oto jak włączyć dostęp do danych.

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

W tym przypadku serwer nazywa się sqlserver007 i ustawiłem DATA ACCESS opcja TRUE .

Oto bardziej zwięzły sposób na zrobienie tego samego:

sp_serveroption 'sqlserver007', 'DATA ACCESS', 'TRUE';

Uruchomienie jednego z nich umożliwi dostęp do danych na określonym serwerze połączonym.

Nawiasem mówiąc, określony serwer powiązany może być w razie potrzeby serwerem lokalnym. Nie musi to być serwer zdalny.

Aby sprawdzić ustawienia dostępu do danych, uruchom zapytanie na sys.servers widok katalogu systemowego.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Wynik:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 1                        |
| Homer        | 1                        |
+--------------+--------------------------+

Ponownie uruchamiasz to na serwerze lokalnym – nie na serwerze zdalnym.

Przykład 2 – Wyłącz dostęp do danych

Aby wyłączyć dostęp do danych, po prostu ustaw @optvalue na FALSE .

EXEC sp_serveroption
  @server = 'sqlserver007',
  @optname = 'DATA ACCESS',
  @optvalue = 'FALSE';

Teraz ponownie sprawdź ustawienie.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Wynik:

+--------------+--------------------------+
| name         | is_data_access_enabled   |
|--------------+--------------------------|
| sqlserver007 | 0                        |
| Homer        | 1                        |
+--------------+--------------------------+

Na którym serwerze mam uruchomić kod?

Uruchom kod na serwerze, z którego zamierzasz uruchamiać zapytania rozproszone.

W moim przykładzie sqlserver007 to nazwa lokalnego serwera i Homer jest serwerem zdalnym/połączonym. Gdybym chciał uruchomić zapytania rozproszone przeciwko Homer , uruchomiłbym kod na sqlserver007 .

Nie muszę przeskakiwać do Homera aby zmienić jego ustawienie. W rzeczywistości może mieć inne ustawienie niż to, które stosuję do sqlserver007 .

Aby zademonstrować ten punkt, oto, co otrzymam, jeśli porównam wyniki serwera połączonego z rzeczywistym ustawieniem na serwerze zdalnym.

EXEC sp_serveroption
  @server = 'Homer',
  @optname = 'DATA ACCESS',
  @optvalue = 'TRUE';

SELECT 
  'From local',
  is_data_access_enabled 
FROM sys.servers
WHERE name = 'Homer'
UNION ALL
SELECT 
  'Remote setting',
  is_data_access_enabled 
FROM Homer.master.sys.servers
WHERE server_id = 0;

Wynik:

+--------------------+--------------------------+
| (No column name)   | is_data_access_enabled   |
|--------------------+--------------------------|
| From local         | 1                        |
| Remote setting     | 0                        |
+--------------------+--------------------------+

W takim przypadku serwer lokalny ma inne ustawienie niż jego odpowiednik w serwerze połączonym.

A fakt, że udało mi się pobrać te informacje za pomocą zapytania rozproszonego, pokazuje, że to ustawienie mojego serwera umożliwiło zapytanie rozproszone, a nie serwera zdalnego.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa funkcja QUOTENAME() w programie SQL Server (T-SQL)

  2. Zapytanie rekurencyjne w SQL Server

  3. Jak wypisać wszystkie daty między dwiema datami?

  4. Ograniczenie sprawdzania nakładania się zakresu dat

  5. Zrozumienie instrukcji ALTER TABLE ADD COLUMN w programie SQL Server