sql >> Database teknologi >  >> RDS >> Sqlserver

Returner kolonneprivilegier fra en sammenkædet server i SQL Server (T-SQL-eksempler)

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 .


  1. Samle mellem tabeller i to forskellige databaser?

  2. DBCA Opret database dårlig REMOTE_LISTENER

  3. Entity Framework 6 med Npgsql

  4. Konverter 'datetimeoffset' til 'datetime2' i SQL Server (T-SQL-eksempler)