Tip: Roles y permisos en SQL SErver
Posted by admin | Posted in Relacional | Posted on 15-08-2011
0
Hoy, un compañero de los grupos de noticias de SQL Server preguntaba sobre como gestionar los permisos de roles y usuarios en el grupo de noticias sobre SQL server en castellano. Me gustó la pregunta así que me permito copiaros mi respuesta (aunque aún no se si es la buena) este es el post
Y esta mis respuesta
Los usuarios para tener acceso han existir en las bases de datos, o bien, darle permisos a public, yo te sugiero que hagas algo como lo que hace el siguiente script. Obviamente, estamos dando muchos permisos.. así que quizá, si la seguridad es un factor importante podrías pensarte bien si es la situación adecuada. (ojo con el script que al final borro las bases de datos.. a ver si vamos a tener un disgusto
)
create database tesoreria;
go
create database contabilidad;
go
create login a with password=’Contra1Se@ia’;
create login b with password=’Otr0P@sss’;
go
use tesoreria;
go
create user a for login a;
create user b for login b;
create role leeryejecutar;
exec sp_addrolemember ‘leeryejecutar’,'a’;
exec sp_addrolemember ‘leeryejecutar’,'b’;
go
declare @sql nvarchar(max)
set @sql=”;
select @sql=@sql+’GRANT DELETE, INSERT, SELECT, UPDATE ON ‘ +QUOTENAME(table_schema)+’.'+ quotename(TABLE_NAME) +’ TO leeryejecutar;’ from INFORMATION_SCHEMA.TABLES ;/* tablas y vistas */
exec sp_executesql @sql,N”
set @sql=”;
select @sql=@sql+’GRANT EXEC ON ‘ + QUOTENAME(ROUTINE_SCHEMA)+’.'+QUOTENAME(ROUTINE_NAME) +’ TO leeryejecutar;’ from INFORMATION_SCHEMA.ROUTINES ;/* tablas y vistas */
exec sp_executesql @sql,N”
go
use contabilidad;
create table a(id int);
go
create procedure PROC_a @id int as begin select * from a end ;
go
create user a for login a;
create user b for login b;
create role leeryejecutar;
exec sp_addrolemember ‘leeryejecutar’,'a’;
exec sp_addrolemember ‘leeryejecutar’,'b’;
go
declare @sql nvarchar(max)
set @sql=”;
select @sql=@sql+’GRANT DELETE, INSERT, SELECT, UPDATE ON ‘ +QUOTENAME(table_schema)+’.'+ quotename(TABLE_NAME) +’ TO leeryejecutar;’ from INFORMATION_SCHEMA.TABLES ;/* tablas y vistas */
exec sp_executesql @sql,N”
set @sql=”;
select @sql=@sql+’GRANT EXEC ON ‘ + QUOTENAME(ROUTINE_SCHEMA)+’.'+QUOTENAME(ROUTINE_NAME) +’ TO leeryejecutar;’ from INFORMATION_SCHEMA.ROUTINES ;/* tablas y vistas */
exec sp_executesql @sql,N”
go
use master;
drop database contabilidad;
drop database tesoreria;
drop login a;
drop login b;

