I SQL Server kan du använda sp_table_privileges_ex
systemlagrad procedur för att returnera behörighetsinformation om en specificerad tabell från en specificerad länkad server.
Du kan ange en enskild tabell, eller så kan du ange alla tabeller från en given databas eller tabellschema. Du kan också använda jokertecken för att specificera tabellen/tabellerna. Men du kan också ange om jokertecken ska tolkas som jokertecken.
Syntax
Syntaxen ser ut så här:
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 är det enda nödvändiga argumentet. Detta är namnet på den länkade servern som du vill ha tabellinformationen från.
De andra argumenten är valfria och de visas i följande exempel.
Exempel 1 – Returrättigheter för en specifik tabell
Det här exemplet returnerar privilegier för en specifik kolumn, i en specifik tabell, från ett specifikt tabellschema, i en specifik databas.
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 | +----------------------+---------------+--------------+-----------+-----------+-------------+----------------+
Detta kan också utföras så här:
EXEC sp_table_privileges_ex 'Homer', 'City', 'Dimension', 'WideWorldImportersDW';
Exempel 2 – Använda standarddatabasen
Om du inte tillhandahåller @table_catalog
argument (för att ange databasen), kommer standarddatabasen för den länkade servern att användas.
Om jag tar bort @table_catalog
argument från föregående exempel:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'City', @table_schema = 'Dimension';
Jag får följande resultat:
(0 rows affected) Time: 0.311s
Detta beror på att WideWorldImportersDW
databasen är inte standarddatabasen för den länkade servern. I det här fallet, när jag skapade den länkade servern, använde jag @catalog = 'Music'
för att ange att databasen som heter Musik skulle vara standarddatabasen för denna länkade server.
Så om jag anger en kolumn som råkar finnas i standarddatabasen får jag resultat:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Artists';
Jag får följande 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Observera att jag inte angav tabellschemat i det här exemplet, eftersom det är valfritt.
Exempel 3 – Ange endast namnet på tabellschemat
I det här exemplet anger jag endast schemanamnet (även servern, självklart).
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_schema = 'dbo';
Det returnerar 35 rader på mitt system. Detta omfattar 4 tabeller och 3 vyer.
Exempel 4 – Ange endast den länkade servern (inga andra argument)
Här anger jag bara den länkade servern - jag ger inga andra argument. I det här fallet kommer den att returnera alla privilegier för alla kolumner i databasen:
EXEC sp_table_privileges_ex @table_server = 'Homer';
Jag kommer inte att visa resultaten här eftersom det gav över 3 000 rader. De flesta av dessa var från sys
tabellschema.
Exempel 5 – Jokertecken
Du kan också använda jokertecken. Här är ett exempel på hur du använder %
jokertecken:
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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+
Detta returnerar privilegier för alla tabeller som börjar med Ar
.
Men du kan också använda @fUsePattern
argument för att avgöra om jokertecken ska tolkas som jokertecken eller inte. Standardvärdet är 1
, vilket betyder att de ska tolkas som jokertecken. Ett värde på 0
anger att de inte ska tolkas som jokertecken.
Så här händer om jag lägger till @fUsePattern = 0
till föregående exempel:
EXEC sp_table_privileges_ex @table_server = 'Homer', @table_name = 'Ar%', @fUsePattern = 0;
Resultat:
(0 rows affected) Time: 0.318s
Och här är vad som händer om jag ställer in den på 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 | +-------------+---------------+--------------+-----------+-----------+-------------+----------------+