I SQL Server kan du bruge sp_table_privileges_ex
systemlagret procedure for at returnere privilegieoplysninger om en specificeret tabel fra en specificeret forbundet server.
Du kan angive en individuel tabel, eller du kan angive alle tabeller fra en given database eller tabelskema. Du kan også bruge jokertegn til at angive tabellen/tabellerne. Du kan dog også angive, om jokertegnene skal fortolkes som jokertegn.
Syntaks
Syntaksen ser sådan ud:
sp_table_privileges_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [@fUsePattern =] 'fUsePattern']
@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 de er demonstreret i de følgende eksempler.
Eksempel 1 – Returneringsrettigheder for en specifik tabel
Dette eksempel returnerer privilegier for en specifik kolonne, i en specifik tabel, fra et specifikt tabelskema, i en specifik database.
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension', @table_catalog = 'WideWorldImportersDW';
Resultat:
+----------------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +----------------------+---------------+--------------+-----------+-----------+-------------+----------------+
Dette kunne også udføres sådan her:
EXEC sp_table_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW';
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_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension';
Jeg får følgende resultat:
(0 rows affected) Time: 0.311s
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_table_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Jeg får følgende resultat:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Bemærk, at jeg ikke specificerede tabelskemaet i dette eksempel, da det er valgfrit.
Eksempel 3 – Angiv kun tabelskemanavnet
I dette eksempel angiver jeg kun skemanavnet (også serveren naturligvis).
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Det returnerer 35 rækker på mit system. Dette dækker 4 borde og 3 visninger.
Eksempel 4 – 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_table_privileges_ex @table_server = 'Homer';
Jeg vil ikke vise resultaterne her, fordi det returnerede over 3.000 rækker. De fleste af disse var fra sys
tabelskema.
Eksempel 5 – Jokertegn
Du kan også bruge jokertegn. Her er et eksempel på brug af %
jokertegn:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%';
Resultat:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Dette returnerer privilegier for alle tabeller, der begynder med Ar
.
Du kan dog også bruge @fUsePattern
argument for at bestemme, om jokertegn skal fortolkes som jokertegn eller ej. Standardværdien er 1
, hvilket betyder, at de skal tolkes som jokertegn. En værdi på 0
angiver, at de ikke skal fortolkes som jokertegn.
Her er, hvad der sker, hvis jeg tilføjer @fUsePattern = 0
til det forrige eksempel:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 0;
Resultat:
(0 rows affected) Time: 0.318s
Og her er, hvad der sker, hvis jeg indstiller det til 1
:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 1;
Resultat:
+-------------+---------------+--------------+-----------+-----------+-------------+----------------+ | 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+