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