martes, 1 de junio de 2010

Otorgar permisos en SQL 2005 como todo una meretriz

EL dia de ayer tuve que migrar una base de datos de un servidor a otro para poder realizar unas pruebas de operacion. En el nuevo servidor esta instalado el SQL Server 2005 y recorde que ahora en esta nueva version alla en Redmont quisieron poner las cosas dificiles con los cambios que le hicieron a las pantallas de amdinistracion de permisos.

Como la base de datos era algo extensa y no queria pasarme la mañana dando permisos y madrearme la muñeca moviendo el mouse como un loco, asi que decidi escribir un par de sentencias para simplificarme eso. Asi que, queridos educandos, el dia de hoy vamos aprender como otorgar permisos sobre objetos de bases de datos a un usuario en especifico en forma nice y sin sudar nada.

Doy por hecho que sabran como usar el Enterprise Manager de SQL y el Query Analizer. Al menos espero que sepan usar el Copy/paste pues.

1. Bien, primero nos vamos al query analizer y abrimos la base de datos que nos interesa. Es necesario que se cuenten con los permisos necesarios para evitar los corajes.

2. Como ya sabemos a que usuario queremos darle permiso lo principal es otorgarle permisos primero de acceso a la base de datos. Lo hacemos de una forma elegante con la siguiente sentencia:

exec sp_grantdbaccess 'Nombre_de_usuario', 'Nombre_de_usuario'

Si, asi es: donde dice 'Nombre_de_usuario' va el nombre de usuario al que ustedes quieren darle permisos.

3. Como ya tenemos acceso de public ahora declararemos un par de variables para no tener que editar nada en el futuro. Aqui solo declaramos una variable de texto para guardar el nombre del usuario y posteriormente concatenarlo dentro de la sentencia del GRANT.

DECLARE @user varchar(30)
SET @user = 'xtest'


Donde @user es el nombre de usuario al que se le quiere dar el acceso.

4. Con la siguientes sentencias obtendremos un listado ya con la sintaxis correctas en SQL para asignar los permisos al usuario.

SELECT 'GRANT SELECT, INSERT, UPDATE, DELETE ON ' +su.name+'.'+so.name + ' TO ' + @User
FROM sysobjects so, sysusers su WHERE so.uid=su.uid AND so.xtype in ('U', 'V')


Esta primera sentencia listara solo tablas y vistas de la base de datos.

SELECT 'GRANT EXECUTE ON ' +su.name+'.'+so.name + ' TO ' + @User
FROM sysobjects so, sysusers su WHERE so.uid=su.uid AND so.xtype in ('P') and so.name not like '%DT_%'


Y esta otra sentencia listara los stored procedures de la base de datos.

5. Finalmente solo tendremos que tomar el resultado y ejecutarlo para que terminemos el trabajo.

El resultado seria algo asi:

GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Servers TO xtest

Facil no?

Las sentencias estan muy en bruto pero es lo basico para hacer un stored procedure o quizas una sentencia mas elaborada. Ustedes disculparan pero me encuentro en un estupido taller de desarrollo humano y la sarta de idioteces que dicen interfieren con mis habilidades de codificar en SQL.

Happy coding.

Saludos

1 comentario:

Anónimo dijo...
Este comentario ha sido eliminado por un administrador del blog.