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
.