sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo habilitar/deshabilitar el acceso a datos en SQL Server (ejemplo de T-SQL)

SQL Server tiene una opción de configuración de "acceso a datos" que habilita y deshabilita un servidor vinculado para el acceso de consultas distribuidas.

Si alguna vez recibe el error "El servidor no está configurado para el ACCESO A LOS DATOS", probablemente deba habilitar el acceso a los datos para el servidor vinculado en el que está intentando ejecutar la consulta distribuida. Por el contrario, también puede haber momentos en los que necesite deshabilitar el acceso a los datos.

Para habilitar o deshabilitar el acceso a datos, use la sp_serveroption procedimiento almacenado del sistema. Ejecútelo en el servidor desde el que desea ejecutar consultas distribuidas. El siguiente ejemplo demuestra cómo hacer esto.

Ejemplo 1:habilitar el acceso a datos

Aquí se explica cómo habilitar el acceso a los datos.

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

En este caso, el servidor se llama sqlserver007 , y configuré el DATA ACCESS opción a TRUE .

Esta es una forma más concisa de hacer lo mismo:

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

La ejecución de cualquiera de ellos habilitará el acceso a los datos en el servidor vinculado especificado.

Por cierto, el servidor vinculado especificado puede ser el servidor local si es necesario. No es necesario que sea un servidor remoto.

Para verificar la configuración de acceso a datos, ejecute una consulta en sys.servers vista del catálogo del sistema.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Resultado:

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

Una vez más, ejecute esto en el servidor local, no en el servidor remoto.

Ejemplo 2:deshabilitar el acceso a datos

Para deshabilitar el acceso a los datos, simplemente configure @optvalue a FALSE .

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

Ahora compruebe la configuración de nuevo.

SELECT 
  name,
  is_data_access_enabled 
FROM sys.servers;

Resultado:

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

¿En qué servidor ejecuto el código?

Ejecute el código en el servidor desde el que pretende ejecutar consultas distribuidas.

En mi ejemplo, sqlserver007 es el nombre del servidor local y Homer es un servidor remoto/enlazado. Si quisiera ejecutar consultas distribuidas contra Homer , ejecutaría el código contra sqlserver007 .

No necesito saltar a Homer para cambiar su configuración. De hecho, podría tener una configuración diferente a la que aplico a sqlserver007 .

Para demostrar este punto, esto es lo que obtengo si comparo los resultados del servidor vinculado con la configuración real en el servidor remoto.

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;

Resultado:

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

En este caso, el servidor local tiene una configuración diferente a su homólogo del servidor vinculado.

Y el hecho de que pude recuperar esta información a través de una consulta distribuida demuestra que fue la configuración de mi propio servidor la que permitió la consulta distribuida, no la del servidor remoto.