Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả lại đặc quyền bảng từ một máy chủ được liên kết trong SQL Server (Ví dụ T-SQL)

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            |
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách trả lại giá trị mã ASCII cho một ký tự nhất định trong SQL Server

  2. 3 cách để trích xuất tháng từ một ngày trong SQL Server (T-SQL)

  3. Cách xuất dữ liệu máy chủ SQL từ bảng sang tệp CSV

  4. Làm thế nào bạn có thể đặt tên cho các Bảng của Tập dữ liệu mà bạn trả về trong một chương trình đã lưu trữ?

  5. Sao chép dữ liệu từ Salesforce sang SQL Server với Spectral Core