Trong SQL Server, bạn có thể sử dụng sp_table_privileges_ex
hệ thống lưu trữ thủ tục để trả về thông tin đặc quyền về một bảng cụ thể từ một máy chủ được liên kết cụ thể.
Bạn có thể chỉ định một bảng riêng lẻ hoặc bạn có thể chỉ định tất cả các bảng từ một cơ sở dữ liệu hoặc lược đồ bảng nhất định. Bạn cũng có thể sử dụng các ký tự đại diện để chỉ định / s bảng. Tuy nhiên, bạn cũng có thể chỉ định xem các ký tự đại diện có được hiểu là ký tự đại diện hay không.
Cú pháp
Cú pháp như sau:
sp_table_privileges_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [@fUsePattern =] 'fUsePattern']
@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à chúng được chứng minh trong các ví dụ sau.
Ví dụ 1 - Đặc quyền trả lại cho một bảng cụ thể
Ví dụ này 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_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW';
Kết quả:
+----------------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +----------------------+---------------+--------------+-----------+-----------+-------------+----------------+
Điều này cũng có thể được thực thi như thế này:
EXEC sp_table_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW';
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_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension';
Tôi nhận được kết quả sau:
(0 rows affected) Time: 0.311s
Đ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_table_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Tôi nhận được kết quả sau:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Lưu ý rằng tôi không chỉ định lược đồ bảng trong ví dụ này, vì nó là tùy chọn.
Ví dụ 3 - Chỉ định Tên giản đồ bảng
Trong ví dụ này, tôi chỉ định tên lược đồ (rõ ràng là cả máy chủ).
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Điều đó trả về 35 hàng trên hệ thống của tôi. Điều này bao gồm 4 bảng và 3 chế độ xem.
Ví dụ 4 - 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_table_privileges_ex @table_server = 'Homer';
Tôi sẽ không hiển thị kết quả ở đây vì nó trả về hơn 3.000 hàng. Hầu hết trong số này là từ sys
lược đồ bảng.
Ví dụ 5 - 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_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%';
Kết quả:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Điều này trả về các đặc quyền cho tất cả các bảng bắt đầu bằng Ar
.
Tuy nhiên, bạn cũng có thể sử dụng @fUsePattern
để xác định xem các ký tự đại diện có được hiểu là ký tự đại diện hay không. Giá trị mặc định là 1
, có nghĩa là chúng phải được hiểu là các ký tự đại diện. Giá trị 0
chỉ định rằng chúng không nên được hiểu là các ký tự đại diện.
Đây là điều sẽ xảy ra nếu tôi thêm @fUsePattern = 0
về ví dụ trước:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 0;
Kết quả:
(0 rows affected) Time: 0.318s
Và đây là những gì sẽ xảy ra nếu tôi đặt nó thành 1
:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 1;
Kết quả:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+