Trong SQL Server, bạn có thể sử dụng sp_column_privileges_ex
hệ thống lưu trữ thủ tục để trả về đặc quyền cột cho các cột từ một máy chủ được liên kết cụ thể.
Bạn có thể chỉ định một cột riêng lẻ hoặc bạn có thể chỉ định tất cả các cột từ một cơ sở dữ liệu, bảng nhất định, v.v.
Cú pháp
Cú pháp như sau:
sp_column_privileges_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @column_name = ] 'column_name' ]
@table_server
đối số là đối số bắt buộc duy nhất. Đây là tên của máy chủ được liên kết mà bạn muốn có thông tin bảng.
Các đối số khác là tùy chọn và tôi trình bày chúng trong các ví dụ sau. Để biết thêm thông tin về các đối số này, hãy xem tài liệu của Microsoft.
Ví dụ 1 - Trả lại Đặc quyền cho một Cột Cụ thể
Ví dụ sau trả về các đặc quyền cho một cột cụ thể, trong một bảng cụ thể, từ một lược đồ bảng cụ thể, trong một cơ sở dữ liệu cụ thể.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW', @column_name = 'Region';
Kết quả:
+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | INSERT | YES | | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | REFERENCES | YES | | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | SELECT | YES | | WideWorldImportersDW | Dimension | City | Region | dbo | dbo | UPDATE | YES | +----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Điều này cũng có thể được thực thi như thế này:
EXEC sp_column_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW', 'Region';
Ví dụ 2 - Sử dụng Cơ sở dữ liệu Mặc định
Nếu bạn không cung cấp @table_catalog
đối số (để chỉ định cơ sở dữ liệu), cơ sở dữ liệu mặc định cho máy chủ được liên kết sẽ được sử dụng.
Nếu tôi xóa @table_catalog
đối số từ ví dụ trước:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @column_name = 'Region';
Tôi nhận được kết quả sau:
(0 rows affected) Time: 0.321s
Điều này là do WideWorldImportersDW
cơ sở dữ liệu không phải là cơ sở dữ liệu mặc định cho máy chủ được liên kết. Trong trường hợp này, khi tạo máy chủ được liên kết, tôi đã sử dụng @catalog = 'Music'
để chỉ định rằng cơ sở dữ liệu có tên Music sẽ là cơ sở dữ liệu mặc định cho máy chủ được liên kết này.
Vì vậy, nếu tôi chỉ định một cột có trong cơ sở dữ liệu mặc định, tôi sẽ nhận được kết quả:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @column_name = 'ArtistId';
Tôi nhận được kết quả sau:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Ví dụ 3 - Chỉ Chỉ định Bảng
Trong ví dụ này, tôi chỉ xác định tên bảng.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Kết quả:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | 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 | | Music | dbo | Artists | CountryId | dbo | dbo | INSERT | YES | | Music | dbo | Artists | CountryId | dbo | dbo | REFERENCES | YES | | Music | dbo | Artists | CountryId | dbo | dbo | SELECT | YES | | Music | dbo | Artists | CountryId | 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.
Ví dụ 4 - Chỉ định tên cột
Trong ví dụ này, tôi chỉ định tên cột (rõ ràng là cả máy chủ).
EXEC sp_column_privileges_ex @table_server = 'Homer', @column_name = 'ArtistName';
Kết quả:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | COLUMN_NAME | GRANTOR | GRANTEE | PRIVILEGE | IS_GRANTABLE | |-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------| | 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 | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | BluesAlbums | ArtistName | dbo | dbo | UPDATE | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | JazzAlbums | ArtistName | dbo | dbo | UPDATE | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | INSERT | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | REFERENCES | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | SELECT | YES | | Music | dbo | RockAlbums | ArtistName | dbo | dbo | UPDATE | YES | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Điều này đã trả lại đặc quyền cho ba cột khác. Chúng xảy ra từ ba chế độ xem khác nhau (cơ sở dữ liệu có ba chế độ xem với một ArtistName
cột:BluesAlbums
, JazzAlbums
và RockAlbums
).
Ví dụ 5 - Chỉ Chỉ định Máy chủ được Liên kết (không có đối số nào khác)
Ở đây tôi chỉ chỉ định máy chủ được liên kết - tôi không cung cấp bất kỳ đối số nào khác. Trong trường hợp này, nó sẽ trả về tất cả các đặc quyền cho tất cả các cột trong cơ sở dữ liệu:
EXEC sp_column_privileges_ex @table_server = 'Homer';
Tôi sẽ không hiển thị kết quả ở đây vì nó trả về hơn 26.000 hàng. Hầu hết trong số này là từ sys
lược đồ bảng.
Ví dụ 6 - Chỉ định một lược đồ bảng
Ví dụ sau đây thu hẹp kết quả vào một lược đồ bảng cụ thể (dbo
).
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Điều này trả về một tập hợp kết quả nhỏ hơn nhiều so với ví dụ trước. Nó vẫn còn khá lớn, vì vậy tôi sẽ không hiển thị nó ở đây.
Ví dụ 7 - Các ký tự đại diện
Bạn cũng có thể sử dụng các ký tự đại diện. Dưới đây là một ví dụ về việc sử dụng %
ký tự đại diện:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Điều này trả về các đặc quyền cho tất cả các cột bắt đầu bằng Ar
.