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