Trong SQL Server, bạn có thể sử dụng sp_column_privileges
hệ thống lưu trữ thủ tục để trả về thông tin đặc quyền cột cho một bảng nhất định trong môi trường hiện tại.
Cung cấp tên bảng làm đối số khi thực hiện thủ tục được lưu trữ và các đặc quyền cột sẽ được trả về cho bảng đó. Bạn cũng có thể cung cấp chủ sở hữu bảng, bộ định lượng bảng và / hoặc tên cột nếu được yêu cầu.
Cú pháp
Cú pháp như sau:
sp_column_privileges [ @table_name = ] 'table_name' [ , [ @table_owner = ] 'table_owner' ] [ , [ @table_qualifier = ] 'table_qualifier' ] [ , [ @column_name = ] 'column' ]
@table_name
đối số là đối số bắt buộc duy nhất. Đây là tên của bảng mà bạn muốn có các đặc quyền của cột.
Ví dụ 1 - Trả lại Đặc quyền cho một Cột Cụ thể
Ví dụ này sử dụng tất cả các đối số có thể. Nó trả về các đặc quyền cho một cột cụ thể, trong một bảng cụ thể, từ chủ sở hữu bảng cụ thể, trong một cơ sở dữ liệu cụ thể.
EXEC sp_column_privileges @table_name = 'Cities', @table_owner = 'Application', @table_qualifier = 'WideWorldImporters', @column_name = 'Location';
Kết quả:
+--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +--------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Dưới đây là một cách ngắn gọn hơn để làm điều đó:
sp_column_privileges 'Cities', 'Application', 'WideWorldImporters', 'Location';
Điều đó trả lại kết quả tương tự.
Ví dụ 2 - Chỉ Chỉ định Bảng
Trong ví dụ này, tôi chuyển sang một cơ sở dữ liệu khác và chỉ xác định tên bảng.
USE Music; EXEC sp_column_privileges @table_name = 'Artists';
Kết quả:
+-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Điều này trả về các đặc quyền cho tất cả các cột trong bảng được chỉ định.
Lưu ý rằng bạn cần phải ở trong cơ sở dữ liệu chính xác. Nếu tôi chạy lại ví dụ trước đó trên một cơ sở dữ liệu khác, tôi không nhận được kết quả nào.
USE WideWorldImporters; EXEC sp_column_privileges @table_name = 'Artists';
Kết quả:
(0 rows affected)
Ví dụ 3 - Giới thiệu về Vòng loại bảng
Nếu bạn cung cấp @table_qualifier
đối số, nó phải giống với cơ sở dữ liệu hiện tại. Nếu không, có thể bạn sẽ gặp lỗi Msg 15250.
USE Music; EXEC sp_column_privileges @table_name = 'Artists', @table_qualifier = 'WideWorldImporters';
Kết quả:
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.