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?
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 voulez simplement exécuter aveuglément, vous pouvez le faire à la place, mais cela dépend du contenu de tout ensemble individuel de commandes <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;