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

Devolver privilegios de tabla desde un servidor vinculado en SQL Server (ejemplos de T-SQL)

En SQL Server puede usar el sp_table_privileges_ex procedimiento almacenado del sistema para devolver información de privilegios sobre una tabla específica desde un servidor vinculado específico.

Puede especificar una tabla individual o puede especificar todas las tablas de una base de datos determinada o un esquema de tabla. También puede utilizar caracteres comodín para especificar la tabla o tablas. Sin embargo, también puede especificar si los caracteres comodín deben interpretarse como caracteres comodín.

Sintaxis

La sintaxis es así:

sp_table_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]  
     [ , [@fUsePattern =] 'fUsePattern']

El @table_server argumento es el único argumento requerido. Este es el nombre del servidor vinculado del que desea la información de la tabla.

Los otros argumentos son opcionales y se muestran en los siguientes ejemplos.

Ejemplo 1:devolución de privilegios para una tabla específica

Este ejemplo devuelve privilegios para una columna específica, en una tabla específica, desde un esquema de tabla específico, en una base de datos específica.

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension', 
  @table_catalog = 'WideWorldImportersDW';

Resultado:

+----------------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT            | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|----------------------+---------------+--------------+-----------+-----------+-------------+----------------|
| WideWorldImportersDW | Dimension     | City         | dbo       | dbo       | DELETE      | YES            |
| WideWorldImportersDW | Dimension     | City         | dbo       | dbo       | INSERT      | YES            |
| WideWorldImportersDW | Dimension     | City         | dbo       | dbo       | REFERENCES  | YES            |
| WideWorldImportersDW | Dimension     | City         | dbo       | dbo       | SELECT      | YES            |
| WideWorldImportersDW | Dimension     | City         | dbo       | dbo       | UPDATE      | YES            |
+----------------------+---------------+--------------+-----------+-----------+-------------+----------------+

Esto también podría ejecutarse así:

EXEC sp_table_privileges_ex 
  'Homer',
  'City',
  'Dimension',
  'WideWorldImportersDW';

Ejemplo 2:uso de la base de datos predeterminada

Si no proporciona el @table_catalog argumento (para especificar la base de datos), se utilizará la base de datos predeterminada para el servidor vinculado.

Si elimino el @table_catalog argumento del ejemplo anterior:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension';

Obtengo el siguiente resultado:

(0 rows affected)
Time: 0.311s

Esto se debe a que WideWorldImportersDW La base de datos no es la base de datos predeterminada para el servidor vinculado. En este caso, cuando creé el servidor vinculado, usé @catalog = 'Music' para especificar que la base de datos llamada Música sería la base de datos predeterminada para este servidor vinculado.

Entonces, si especifico una columna que está en la base de datos predeterminada, obtendré resultados:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

Obtengo el siguiente resultado:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | dbo       | dbo       | DELETE      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

Tenga en cuenta que no especifiqué el esquema de la tabla en este ejemplo, ya que es opcional.

Ejemplo 3:especificar solo el nombre del esquema de la tabla

En este ejemplo, solo especifico el nombre del esquema (también el servidor, obviamente).

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_schema = 'dbo';

Eso devuelve 35 filas en mi sistema. Esto cubre 4 tablas y 3 vistas.

Ejemplo 4:especifique solo el servidor vinculado (sin otros argumentos)

Aquí solo especifico el servidor vinculado; no proporciono ningún otro argumento. En este caso, devolverá todos los privilegios para todas las columnas de la base de datos:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer';

No mostraré los resultados aquí porque devolvió más de 3000 filas. La mayoría de estos eran del sys esquema de tabla.

Ejemplo 5:caracteres comodín

También puede utilizar caracteres comodín. Aquí hay un ejemplo del uso de % carácter comodín:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%';

Resultado:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | dbo       | dbo       | DELETE      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

Esto devuelve privilegios para todas las tablas que comienzan con Ar .

Sin embargo, también puede usar @fUsePattern argumento para determinar si los caracteres comodín deben o no interpretarse como caracteres comodín. El valor predeterminado es 1 , lo que significa que deben interpretarse como caracteres comodín. Un valor de 0 especifica que no deben interpretarse como caracteres comodín.

Esto es lo que sucede si agrego @fUsePattern = 0 al ejemplo anterior:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 0;

Resultado:

(0 rows affected)
Time: 0.318s

Y esto es lo que sucede si lo configuro en 1 :

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 1;

Resultado:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| TABLE_CAT   | TABLE_SCHEM   | TABLE_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------+---------------+--------------+-----------+-----------+-------------+----------------|
| Music       | dbo           | Artists      | dbo       | dbo       | DELETE      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | INSERT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | REFERENCES  | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | SELECT      | YES            |
| Music       | dbo           | Artists      | dbo       | dbo       | UPDATE      | YES            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+