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

Как да активирате/деактивирате достъпа до данни в SQL Server (пример за T-SQL)

SQL Server има опция за конфигурация „достъп до данни“, която активира и деактивира свързан сървър за достъп до разпределена заявка.

Ако някога получите грешка „Сървърът не е конфигуриран за ДОСТЪП ДО ДАННИ“, вероятно ще трябва да активирате достъпа до данни за свързания сървър, срещу който се опитвате да изпълните разпределената заявка. Обратно, може също да има моменти, когато трябва да деактивирате достъпа до данни.

За да активирате или деактивирате достъпа до данни, използвайте sp_serveroption системна съхранена процедура. Изпълнете го срещу сървъра, от който възнамерявате да изпълнявате разпределени заявки. Следният пример показва как да направите това.

Пример 1 – Активиране на достъп до данни

Ето как да активирате достъпа до данни.

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

В този случай сървърът се нарича sqlserver007 , и зададох DATA ACCESS опция за TRUE .

Ето по-сбит начин да направите същото:

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

Изпълнението на едно от тях ще позволи достъп до данни на посочения свързан сървър.

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

За да проверите настройката за достъп до данни, изпълнете заявка към sys.servers изглед на системния каталог.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Резултат:

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

Отново изпълнявате това срещу локалния сървър, а не на отдалечения сървър.

Пример 2 – Деактивиране на достъпа до данни

За да деактивирате достъпа до данни, просто задайте @optvalue до FALSE .

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

Сега проверете отново настройката.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Резултат:

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

На кой сървър да стартирам кода?

Изпълнете кода срещу сървъра, от който възнамерявате да изпълнявате разпределени заявки.

В моя пример sqlserver007 е името на локалния сървър и Homer е отдалечен/свързан сървър. Ако исках да изпълнявам разпределени заявки срещу Homer , бих стартирал кода срещу sqlserver007 .

Няма нужда да прескачам към Homer за да промените настройката си. Всъщност може да има различна настройка от тази, която прилагам към sqlserver007 .

За да демонстрирам тази точка, ето какво получавам, ако сравня резултатите от свързания сървър с действителната настройка на отдалечения сървър.

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;

Резултат:

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

В този случай локалният сървър има различна настройка от неговия аналог на свързания сървър.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирате drop Unique Constraint скриптове в база данни на SQL Server - SQL Server / TSQL Урок, част 99

  2. varbinary към низ на SQL Server

  3. Как да премахнете водещи и последващи знаци в SQL Server

  4. Как да създадете таблица с колона за идентичност

  5. Грешка JDBC на SQL Server на Java 8:Драйверът не можа да установи защитена връзка със SQL Server чрез използване на криптиране на Secure Sockets Layer (SSL)