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

Obtenga privilegios de columna para una tabla en SQL Server usando T-SQL:sp_column_privileges

En SQL Server puede usar sp_column_privileges procedimiento almacenado del sistema para devolver información de privilegios de columna para una tabla determinada en el entorno actual.

Proporcione el nombre de la tabla como argumento al ejecutar el procedimiento almacenado y se devolverán los privilegios de columna para esa tabla. También puede proporcionar el propietario de la tabla, el calificador de la tabla y/o el nombre de la columna si es necesario.

Sintaxis

La sintaxis es así:

sp_column_privileges [ @table_name = ] 'table_name'   
     [ , [ @table_owner = ] 'table_owner' ]   
     [ , [ @table_qualifier = ] 'table_qualifier' ]   
     [ , [ @column_name = ] 'column' ]

El @table_name argumento es el único argumento requerido. Este es el nombre de la tabla de la que desea los privilegios de columna.

Ejemplo 1:devolver privilegios para una columna específica

Este ejemplo utiliza todos los argumentos posibles. Devuelve privilegios para una columna específica, en una tabla específica, de un propietario de tabla específico, en una base de datos específica.

EXEC sp_column_privileges 
  @table_name = 'Cities', 
  @table_owner = 'Application',   
  @table_qualifier = 'WideWorldImporters',   
  @column_name = 'Location';

Resultado:

+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| WideWorldImporters | Application   | Cities       | Location      | dbo       | dbo       | INSERT      | YES            |
| WideWorldImporters | Application   | Cities       | Location      | dbo       | dbo       | REFERENCES  | YES            |
| WideWorldImporters | Application   | Cities       | Location      | dbo       | dbo       | SELECT      | YES            |
| WideWorldImporters | Application   | Cities       | Location      | dbo       | dbo       | UPDATE      | YES            |
+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Esta es una forma más concisa de hacerlo:

sp_column_privileges 
  'Cities', 
  'Application',   
  'WideWorldImporters',   
  'Location';

Eso devuelve los mismos resultados.

Ejemplo 2:especificar solo una tabla

En este ejemplo, cambio a otra base de datos y solo especifico el nombre de la tabla.

USE Music;
EXEC sp_column_privileges
  @table_name = 'Artists';

Resultado:

+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | COLUMN_NAME   | GRANTOR   | GRANTEE   | PRIVILEGE   | IS_GRANTABLE   |
|-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------|
| Music             | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | INSERT      | YES            |
| Music             | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | REFERENCES  | YES            |
| Music             | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | SELECT      | YES            |
| Music             | dbo           | Artists      | ActiveFrom    | dbo       | dbo       | UPDATE      | YES            |
| Music             | dbo           | Artists      | ArtistId      | dbo       | dbo       | INSERT      | YES            |
| Music             | dbo           | Artists      | ArtistId      | dbo       | dbo       | REFERENCES  | YES            |
| Music             | dbo           | Artists      | ArtistId      | dbo       | dbo       | SELECT      | YES            |
| Music             | dbo           | Artists      | ArtistId      | dbo       | dbo       | UPDATE      | YES            |
| Music             | dbo           | Artists      | ArtistName    | dbo       | dbo       | INSERT      | YES            |
| Music             | dbo           | Artists      | ArtistName    | dbo       | dbo       | REFERENCES  | YES            |
| Music             | dbo           | Artists      | ArtistName    | dbo       | dbo       | SELECT      | YES            |
| Music             | dbo           | Artists      | ArtistName    | dbo       | dbo       | UPDATE      | YES            |
+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Esto devuelve los privilegios para todas las columnas en la tabla especificada.

Tenga en cuenta que debe estar en la base de datos correcta. Si vuelvo a ejecutar el ejemplo anterior en una base de datos diferente, no obtengo resultados.

USE WideWorldImporters;
EXEC sp_column_privileges
  @table_name = 'Artists';

Resultado:

(0 rows affected)

Ejemplo 3:sobre el calificador de tabla

Si proporciona el @table_qualifier argumento, debe ser el mismo que el de la base de datos actual. Si no es así, probablemente reciba el mensaje de error 15250.

USE Music;
EXEC sp_column_privileges
  @table_name = 'Artists',
  @table_qualifier = 'WideWorldImporters';

Resultados:

Msg 15250, Level 16, State 1, Procedure sp_column_privileges, Line 19
The database name component of the object qualifier must be the name of the current database.