Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Spaltenberechtigungen von einem Verbindungsserver in SQL Server zurückgeben (T-SQL-Beispiele)

In SQL Server können Sie den sp_column_privileges_ex verwenden gespeicherte Systemprozedur, um Spaltenberechtigungen für die Spalten von einem angegebenen Verbindungsserver zurückzugeben.

Sie können eine einzelne Spalte oder alle Spalten einer bestimmten Datenbank, Tabelle usw. angeben.

Syntax

Die Syntax lautet wie folgt:

sp_column_privileges_ex [ @table_server = ] 'table_server'   
     [ , [ @table_name = ] 'table_name' ]   
     [ , [ @table_schema = ] 'table_schema' ]   
     [ , [ @table_catalog = ] 'table_catalog' ]   
     [ , [ @column_name = ] 'column_name' ]

Der @table_server Argument ist das einzige erforderliche Argument. Dies ist der Name des Verbindungsservers, von dem Sie die Tabelleninformationen erhalten möchten.

Die anderen Argumente sind optional und werden in den folgenden Beispielen behandelt. Weitere Informationen zu diesen Argumenten finden Sie in der Microsoft-Dokumentation.

Beispiel 1 – Berechtigungen für eine bestimmte Spalte zurückgeben

Das folgende Beispiel gibt Berechtigungen für eine bestimmte Spalte in einer bestimmten Tabelle aus einem bestimmten Tabellenschema in einer bestimmten Datenbank zurück.

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',   
  @table_catalog = 'WideWorldImportersDW',   
  @column_name = 'Region';

Ergebnis:

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

Dies könnte auch so ausgeführt werden:

EXEC sp_column_privileges_ex 
  'Homer',
  'City', 
  'Dimension',   
  'WideWorldImportersDW',   
  'Region';

Beispiel 2 – Verwendung der Standarddatenbank

Wenn Sie @table_catalog nicht angeben Argument (um die Datenbank anzugeben), wird die Standarddatenbank für den Verbindungsserver verwendet.

Wenn ich den @table_catalog entferne Argument aus dem vorherigen Beispiel:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'City', 
  @table_schema = 'Dimension',
  @column_name = 'Region';

Ich erhalte folgendes Ergebnis:

(0 rows affected)
Time: 0.321s

Das liegt daran, dass WideWorldImportersDW Datenbank ist nicht die Standarddatenbank für den Verbindungsserver. In diesem Fall habe ich beim Erstellen des Verbindungsservers @catalog = 'Music' verwendet um anzugeben, dass die Datenbank mit dem Namen Musik die Standarddatenbank für diesen verknüpften Server sein soll.

Wenn ich also eine Spalte angebe, die sich zufällig in der Standarddatenbank befindet, erhalte ich Ergebnisse:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists', 
  @table_schema = 'dbo',
  @column_name = 'ArtistId';

Ich erhalte folgendes Ergebnis:

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

Beispiel 3 – Geben Sie nur eine Tabelle an

In diesem Beispiel gebe ich nur den Tabellennamen an.

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',
  @table_name = 'Artists';

Ergebnis:

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

Dies gibt die Privilegien für alle Spalten in der angegebenen Tabelle zurück.

Beispiel 4 – Geben Sie nur den Spaltennamen an

In diesem Beispiel gebe ich nur den Spaltennamen an (natürlich auch den Server).

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',   
  @column_name = 'ArtistName';

Ergebnisse:

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

Dadurch wurden Berechtigungen für drei weitere Spalten zurückgegeben. Diese stammen zufällig aus drei verschiedenen Ansichten (die Datenbank hat drei Ansichten mit einem ArtistName Spalte:BluesAlbums , JazzAlbums , und RockAlbums ).

Beispiel 5 – Geben Sie nur den Verbindungsserver an (keine anderen Argumente)

Hier gebe ich nur den Linked Server an – ich gebe keine weiteren Argumente an. In diesem Fall werden alle Berechtigungen für alle Spalten in der Datenbank zurückgegeben:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer';

Ich werde die Ergebnisse hier nicht anzeigen, da über 26.000 Zeilen zurückgegeben wurden. Die meisten davon stammten von sys Tabellenschema.

Beispiel 6 – Geben Sie ein Tabellenschema an

Das folgende Beispiel beschränkt die Ergebnisse auf ein bestimmtes Tabellenschema (dbo ).

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo';

Dadurch wurde eine viel kleinere Ergebnismenge als im vorherigen Beispiel zurückgegeben. Es ist immer noch ziemlich groß, also werde ich es hier nicht anzeigen.

Beispiel 7 – Platzhalterzeichen

Sie können auch Platzhalterzeichen verwenden. Hier ist ein Beispiel für die Verwendung von % Platzhalterzeichen:

EXEC sp_column_privileges_ex 
  @table_server = 'Homer',  
  @table_schema = 'dbo',
  @table_catalog = 'Music',   
  @column_name = 'Ar%';

Dies gibt Privilegien für alle Spalten zurück, die mit Ar beginnen .