Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kembalikan Hak Istimewa Kolom dari Server Tertaut di SQL Server (Contoh T-SQL)

Di SQL Server Anda dapat menggunakan sp_column_privileges_ex prosedur tersimpan sistem untuk mengembalikan hak kolom untuk kolom dari server tertaut yang ditentukan.

Anda dapat menentukan kolom individual, atau Anda dapat menentukan semua kolom dari database, tabel, dll.

Sintaks

Sintaksnya seperti ini:

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 argumen adalah satu-satunya argumen yang diperlukan. Ini adalah nama server tertaut yang Anda inginkan informasi tabelnya.

Argumen lainnya adalah opsional, dan saya membahasnya dalam contoh berikut. Untuk informasi selengkapnya tentang argumen ini, lihat dokumentasi Microsoft.

Contoh 1 – Mengembalikan Hak Istimewa untuk Kolom Tertentu

Contoh berikut mengembalikan hak istimewa untuk kolom tertentu, dalam tabel tertentu, dari skema tabel tertentu, dalam database tertentu.

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',   
  @table_catalog = 'WideWorldImportersDW',   
  @column_name = 'Region';

Hasil:

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

Ini juga bisa dieksekusi seperti ini:

EXEC sp_column_privileges_ex 
  'Homer',
  'City', 
  'Dimension',   
  'WideWorldImportersDW',   
  'Region';

Contoh 2 – Menggunakan Basis Data Default

Jika Anda tidak memberikan @table_catalog argumen (untuk menentukan database), database default untuk server tertaut akan digunakan.

Jika saya menghapus @table_catalog argumen dari contoh sebelumnya:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',
  @column_name = 'Region';

Saya mendapatkan hasil berikut:

(0 rows affected)
Time: 0.321s

Ini karena WideWorldImportersDW database bukan database default untuk server yang ditautkan. Dalam hal ini, ketika saya membuat server tertaut, saya menggunakan @catalog = 'Music' untuk menentukan bahwa basis data yang disebut Musik akan menjadi basis data default untuk server tertaut ini.

Jadi jika saya menentukan kolom yang kebetulan ada di database default, saya akan mendapatkan hasil:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists', 
  @table_schema = 'dbo',
  @column_name = 'ArtistId';

Saya mendapatkan hasil berikut:

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

Contoh 3 – Tentukan Tabel Saja

Dalam contoh ini saya hanya menentukan nama tabel.

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

Hasil:

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

Ini mengembalikan hak istimewa untuk semua kolom dalam tabel yang ditentukan.

Contoh 4 – Tentukan Nama Kolom Saja

Dalam contoh ini saya menentukan nama kolom saja (juga server, tentu saja).

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',   
  @column_name = 'ArtistName';

Hasil:

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

Ini mengembalikan hak istimewa untuk tiga kolom lagi. Ini terjadi dari tiga tampilan berbeda (basis data memiliki tiga tampilan dengan ArtistName kolom:BluesAlbums , JazzAlbums , dan RockAlbums ).

Contoh 5 – Tentukan Hanya Server Tertaut (tidak ada argumen lain)

Di sini saya hanya menentukan server tertaut – saya tidak memberikan argumen lain. Dalam hal ini, ia akan mengembalikan semua hak istimewa untuk semua kolom dalam database:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer';

Saya tidak akan menampilkan hasilnya di sini karena mengembalikan lebih dari 26.000 baris. Sebagian besar berasal dari sys skema tabel.

Contoh 6 – Tentukan Skema Tabel

Contoh berikut mempersempit hasil ke skema tabel tertentu (dbo ).

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Ini mengembalikan kumpulan hasil yang jauh lebih kecil daripada contoh sebelumnya. Masih cukup besar, jadi saya tidak akan menampilkannya di sini.

Contoh 7 – Karakter Wildcard

Anda juga dapat menggunakan karakter wildcard. Berikut ini contoh penggunaan % karakter pengganti:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Ini mengembalikan hak istimewa untuk semua kolom yang dimulai dengan 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. Di SQL Server, bagaimana saya bisa mengunci satu baris dengan cara yang mirip dengan Oracle SELECT FOR UPDATE WAIT?

  2. 6 Cara Memeriksa Ukuran Database di SQL Server menggunakan T-SQL

  3. Menjalankan SQL Server 2014 di Mesin Virtual Azure

  4. Sertakan bulan yang hilang dalam kueri Grup Berdasarkan

  5. Periksa Email Gagal di SQL Server (T-SQL)