Accordez des autorisations à toutes les tables, vues et procédures dans SQL Server 2000

8

Je me demandais s'il y avait un moyen assez efficace d'utiliser T-SQL avec la syntaxe SQL Server 2000 pour GRANT SELECT, INSERT, UPDATE, DELETE, sur toutes les TABLES et VUES pour une base de données particulière tout en excluant 2 ou 3 des plus de 100 objets. J'aimerais également pouvoir accorder des privilèges EXEC sur toutes les procédures stockées.

Actuellement, j'utilise le code ci-dessous pour les modifier un par un. Faire cela pour environ 100 tableaux et 100 vues prend beaucoup trop de temps et prendra encore plus de temps à travers l'interface graphique (à moins que je ne me trompe aussi).

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

Comment puis-je utiliser T-SQL pour parcourir TOUTES les tables et vues utilisateur pour accorder certains privilèges tout en excluant quelques objets?

Geoff Dawdy
la source

Réponses:

8

Ugh, 2000.

En supposant que tous les objets appartiennent à dbo, vous pouvez générer un script, par exemple:

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';

Vous pouvez maintenant copier et coller la sortie au cas où vous voudriez exclure des entrées ou valider. Si vous souhaitez simplement exécuter aveuglément, vous pouvez le faire à la place, mais cela dépend du contenu de tout ensemble de commandes individuel <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;
Aaron Bertrand
la source