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

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

Di SQL Server Anda dapat menggunakan sp_table_privileges_ex prosedur tersimpan sistem untuk mengembalikan informasi hak istimewa tentang tabel tertentu dari server tertaut yang ditentukan.

Anda bisa menentukan tabel individual, atau Anda bisa menentukan semua tabel dari database atau skema tabel yang diberikan. Anda juga dapat menggunakan karakter wildcard untuk menentukan tabel/s. Namun, Anda juga dapat menentukan apakah karakter wildcard harus ditafsirkan sebagai karakter wildcard.

Sintaks

Sintaksnya seperti ini:

sp_table_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]  
     [ , [@fUsePattern =] 'fUsePattern']

@table_server argumen adalah satu-satunya argumen yang diperlukan. Ini adalah nama server tertaut yang Anda inginkan informasi tabelnya.

Argumen lainnya bersifat opsional, dan ditunjukkan dalam contoh berikut.

Contoh 1 – Mengembalikan Hak Istimewa untuk Tabel Tertentu

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

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension', 
  @table_catalog = 'WideWorldImportersDW';

Hasil:

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

Ini juga bisa dieksekusi seperti ini:

EXEC sp_table_privileges_ex 
  'Homer',
  'City',
  'Dimension',
  'WideWorldImportersDW';

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_table_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension';

Saya mendapatkan hasil berikut:

(0 rows affected)
Time: 0.311s

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 database yang disebut Musik akan menjadi database default untuk server tertaut ini.

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

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

Saya mendapatkan hasil berikut:

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

Perhatikan bahwa saya tidak menentukan skema tabel dalam contoh ini, karena ini opsional.

Contoh 3 – Tentukan Nama Skema Tabel Saja

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

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

Itu mengembalikan 35 baris di sistem saya. Ini mencakup 4 tabel dan 3 tampilan.

Contoh 4 – 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_table_privileges_ex 
  @table_server = 'Homer';

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

Contoh 5 – Karakter Wildcard

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

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%';

Hasil:

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

Ini mengembalikan hak istimewa untuk semua tabel yang dimulai dengan Ar .

Namun, Anda juga dapat menggunakan @fUsePattern argumen untuk menentukan apakah karakter wildcard harus ditafsirkan sebagai karakter wildcard atau tidak. Nilai defaultnya adalah 1 , yang berarti bahwa mereka harus ditafsirkan sebagai karakter wildcard. Nilai 0 menetapkan bahwa mereka tidak boleh ditafsirkan sebagai karakter wildcard.

Inilah yang terjadi jika saya menambahkan @fUsePattern = 0 ke contoh sebelumnya:

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 0;

Hasil:

(0 rows affected)
Time: 0.318s

Dan inilah yang terjadi jika saya menyetelnya ke 1 :

EXEC sp_table_privileges_ex 
  @table_server = 'Homer',    
  @table_name = 'Ar%',
  @fUsePattern = 1;

Hasil:

+-------------+---------------+--------------+-----------+-----------+-------------+----------------+
| 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. SQL Server:SUM() dari beberapa baris termasuk klausa where

  2. Cara Menonaktifkan Semua Batasan PERIKSA &Kunci Asing untuk Tabel di SQL Server (Contoh T-SQL)

  3. Mengonfigurasi Notifikasi Email Database di MS SQL Server

  4. Memperkenalkan Fitur Baru - Laporan Pertumbuhan Database Cloud Spotlight

  5. Cara Menggunakan FILEGROUPPROPERTY() di SQL Server