Autorizzazioni GRANT per tutte le tabelle, viste, procedure in SQL Server 2000


8

Mi chiedevo se esistesse un modo abbastanza efficiente di utilizzare T-SQL con la sintassi di SQL Server 2000 per SELEZIONARE, INSERIRE, AGGIORNARE, ELIMINARE su TUTTE LE TABELLE e VISUALIZZAZIONI per un determinato database escludendo 2 o 3 degli oltre 100 oggetti. Vorrei anche essere in grado di concedere i privilegi EXEC su tutte le procedure memorizzate.

Attualmente sto usando il codice qui sotto per cambiarli uno per uno. Fare questo per circa 100 tabelle e 100 visualizzazioni richiede troppo tempo e impiegherà ancora più tempo attraverso la GUI (a meno che non stia sbagliando anche quello).

use [DATABASE_NAME]
GO
GRANT DELETE ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT INSERT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT SELECT ON [dbo].[table_name]TO [user_name]
GO
use [DATABASE_NAME]
GO
GRANT UPDATE ON [dbo].[table_name]TO [user_name]
GO

Come posso usare T-SQL per scorrere TUTTE le tabelle utente e le viste per garantire determinati privilegi escludendo un paio di oggetti?

Risposte:


8

Ugh, 2000.

Supponendo che tutti gli oggetti siano di proprietà dbo, è possibile generare uno script, ad esempio:

SELECT N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type IN (N'U', N'V');

SELECT N'GRANT EXECUTE ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'P';

Ora puoi copiare e incollare l'output nel caso in cui desideri escludere qualsiasi voce o convalidare. Se vuoi solo eseguire ciecamente, puoi invece farlo, ma si basa sul contenuto di ogni singolo set di comandi <4K:

DECLARE @sql NVARCHAR(4000) = N'';

SELECT @sql = @sql + N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'U';

EXEC sp_executesql @sql;

SET @sql = N'';

SELECT @sql = @sql + N'GRANT INSERT, UPDATE, DELETE, SELECT ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'V';

EXEC sp_executesql @sql;

SET @sql = N'';

SELECT @sql = @sql + N'GRANT EXECUTE ON dbo.' + QUOTENAME(name)
  + N' TO [user];'
FROM sysobjects WHERE type = N'P';

EXEC sp_executesql @sql;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.