I SQL Server kan du bruge sp_column_privileges_ex
systemlagret procedure for at returnere kolonneprivilegier for kolonnerne fra en specificeret forbundet server.
Du kan angive en individuel kolonne, eller du kan angive alle kolonner fra en given database, tabel osv.
Syntaks
Syntaksen ser sådan ud:
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
argument er det eneste nødvendige argument. Dette er navnet på den sammenkædede server, som du vil have tabeloplysningerne fra.
De andre argumenter er valgfrie, og jeg dækker dem i de følgende eksempler. For mere information om disse argumenter, se Microsoft-dokumentationen.
Eksempel 1 – Returneringsrettigheder for en specifik kolonne
Følgende eksempel returnerer privilegier for en specifik kolonne, i en specifik tabel, fra et specifikt tabelskema, i en specifik database.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW', @column_name = 'Region';
Resultat:
+----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +----------------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Dette kunne også udføres sådan her:
EXEC sp_column_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW', 'Region';
Eksempel 2 – Brug af standarddatabasen
Hvis du ikke angiver @table_catalog
argument (for at specificere databasen), vil standarddatabasen for den sammenkædede server blive brugt.
Hvis jeg fjerner @table_catalog
argument fra det forrige eksempel:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @column_name = 'Region';
Jeg får følgende resultat:
(0 rows affected) Time: 0.321s
Dette skyldes, at WideWorldImportersDW
databasen er ikke standarddatabasen for den sammenkædede server. I dette tilfælde brugte jeg @catalog = 'Music'
, da jeg oprettede den linkede server for at angive, at databasen kaldet Musik ville være standarddatabasen for denne linkede server.
Så hvis jeg angiver en kolonne, der tilfældigvis er i standarddatabasen, får jeg resultater:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists', @table_schema = 'dbo', @column_name = 'ArtistId';
Jeg får følgende resultat:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Eksempel 3 – Angiv kun en tabel
I dette eksempel angiver jeg kun tabelnavnet.
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Resultat:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Dette returnerer privilegierne for alle kolonner i den angivne tabel.
Eksempel 4 – Angiv kun kolonnenavnet
I dette eksempel angiver jeg kun kolonnenavnet (også serveren, naturligvis).
EXEC sp_column_privileges_ex @table_server = 'Homer', @column_name = 'ArtistName';
Resultater:
+-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+---------------+-----------+-----------+-------------+----------------+
Dette gav privilegier til yderligere tre kolonner. Disse kommer tilfældigvis fra tre forskellige visninger (databasen har tre visninger med et ArtistName
kolonne:BluesAlbums
, JazzAlbums
og RockAlbums
).
Eksempel 5 – Angiv kun den sammenkædede server (ingen andre argumenter)
Her angiver jeg kun den linkede server - jeg giver ikke andre argumenter. I dette tilfælde vil det returnere alle privilegier for alle kolonner i databasen:
EXEC sp_column_privileges_ex @table_server = 'Homer';
Jeg vil ikke vise resultaterne her, fordi det returnerede over 26.000 rækker. De fleste af disse var fra sys
tabelskema.
Eksempel 6 – Angiv et tabelskema
Følgende eksempel indsnævrer resultaterne til et specifikt tabelskema (dbo
).
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Dette gav et meget mindre resultatsæt end det forrige eksempel. Den er stadig ret stor, så jeg viser den ikke her.
Eksempel 7 – Jokertegn
Du kan også bruge jokertegn. Her er et eksempel på brug af %
jokertegn:
EXEC sp_column_privileges_ex @table_server = 'Homer', @table_schema = 'dbo', @table_catalog = 'Music', @column_name = 'Ar%';
Dette returnerer privilegier for alle kolonner, der begynder med Ar
.