Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obter privilégios de coluna para uma tabela no SQL Server usando T-SQL:sp_column_privileges


No SQL Server você pode usar o sp_column_privileges procedimento armazenado do sistema para retornar informações de privilégio de coluna para uma determinada tabela no ambiente atual.

Forneça o nome da tabela como um argumento ao executar o procedimento armazenado e os privilégios da coluna serão retornados para essa tabela. Você também pode fornecer o proprietário da tabela, o qualificador da tabela e/ou o nome da coluna, se necessário.


Sintaxe


A sintaxe fica assim:
sp_column_privileges [ @table_name = ] 'table_name'   
     [ , [ @table_owner = ] 'table_owner' ]   
     [ , [ @table_qualifier = ] 'table_qualifier' ]   
     [ , [ @column_name = ] 'column' ]

O @table_name argumento é o único argumento necessário. Este é o nome da tabela da qual você deseja os privilégios de coluna.

Exemplo 1 - Devolução de privilégios para uma coluna específica


Este exemplo usa todos os argumentos possíveis. Ele retorna privilégios para uma coluna específica, em uma tabela específica, de um proprietário de tabela específico, em um banco de dados específico.
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            |
+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Aqui está uma maneira mais concisa de fazer isso:
sp_column_privileges 
  'Cities', 
  'Application',   
  'WideWorldImporters',   
  'Location';

Isso retorna os mesmos resultados.

Exemplo 2 – Especificar apenas uma tabela


Neste exemplo, mudo para outro banco de dados e especifico apenas o nome da tabela.
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            |
+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+

Isso retorna os privilégios para todas as colunas na tabela especificada.

Observe que você precisa estar no banco de dados correto. Se eu executar novamente o exemplo anterior em um banco de dados diferente, não obtenho resultados.
USE WideWorldImporters;
EXEC sp_column_privileges
  @table_name = 'Artists';

Resultado:
(0 rows affected)

Exemplo 3 – Sobre o qualificador de mesa


Se você fornecer o @table_qualifier argumento, ele deve ser o mesmo que o banco de dados atual. Se não for, você provavelmente receberá o erro Msg 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.