Conceder permisos a todas las tablas, vistas, procedimientos en SQL Server 2000

8

Me preguntaba si había una manera bastante eficiente de usar T-SQL con la sintaxis de SQL Server 2000 para CONCEDER SELECCIONAR, INSERTAR, ACTUALIZAR, BORRAR, en todas las TABLAS y VISTAS para una base de datos en particular, excluyendo 2 o 3 de los más de 100 objetos. También me gustaría poder otorgar privilegios EXEC en todos los procedimientos almacenados.

Actualmente estoy usando el siguiente código para cambiarlos uno por uno. Hacer esto durante aproximadamente 100 tablas y 100 vistas lleva demasiado tiempo y llevará más tiempo a través de la GUI (a menos que también lo esté haciendo mal).

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

¿Cómo puedo usar T-SQL para recorrer TODAS las tablas y vistas de usuario para otorgar ciertos privilegios y excluir un par de objetos?

Geoff Dawdy
fuente

Respuestas:

8

Ugh, 2000.

Suponiendo que todos los objetos son propiedad de dbousted, puede generar un script, por ejemplo:

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

Ahora puede copiar y pegar la salida en caso de que desee excluir cualquier entrada o validarla. Si solo desea ejecutar ciegamente, puede hacerlo, pero se basa en que el contenido de cualquier conjunto individual de comandos sea <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
fuente