Comment refuser les prémisses d'écriture à un user pour toutes les tables sauf une

Nous avons environ 50 tables, et nous devons refuser les permissions d'écriture à chaque table sauf pour une table pour un user particulier.

Comment peut-on le faire?

Voici un moyen de le faire avec SQL dynamic. L'printing peut ne pas afficher la command entière en raison des limitations de sortie dans Management Studio. Vous devrez mettre à jour le nom d'user et l'exception.

DECLARE @sql NVARCHAR(MAX); SET @sql = N''; SELECT @sql = @sql + ' DENY UPDATE, DELETE, INSERT ON ' + QUOTENAME(SCHEMA_NAME([schema_id])) + '.' + QUOTENAME(name) + ' TO [username];' -- fix this username FROM sys.tables WHERE name <> 'exception'; -- fix this to be the one you want to allow PRINT @sql; -- EXEC sp_executesql @sql; 

Dans SQL Server Management Studio:

Accédez à la page de propriétés de l'user, puis à l'onglet Mappage de l'user.

Cochez public et db_datareader (ne cochez pas db_denydatawriter) pour la database appropriée.

Cela leur accordera seulement un access en lecture.

Ensuite, vous pouvez accorder l'insertion et la mise à jour pour l'user à la table en utilisant une requête similaire à ceci:

 GRANT INSERT ON OBJECT::dbo.MyTable TO Fred GRANT UPDATE ON OBJECT::dbo.MyTable TO Fred