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

Trả lại đặc quyền cột 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_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 , JazzAlbumsRockAlbums ).

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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perfect Storm để nâng cấp lên phiên bản SQL Server hiện đại

  2. Chỉ có thể chỉ định một biểu thức trong danh sách chọn khi truy vấn con không được giới thiệu với EXISTS

  3. Kiểm tra xem chuỗi có chứa các ký tự có dấu trong SQL không?

  4. Lỗi SQL Server trên lệnh cập nhật - Đã xảy ra lỗi nghiêm trọng trên lệnh hiện tại

  5. Cách tạo khóa ngoại tổng hợp trong SQL Server (Ví dụ T-SQL)