sql-server - create - permisos para ejecutar jobs sql server
¿Permisos requeridos para ''CREATE USER'' en SQL Server 2005? (4)
Es malo - He encontrado el problema - no fue el usuario de CREATE el que falló, sino una llamada posterior a ''sp_addrolemember''. Esto requiere más permisos que no estaba asignando.
En particular, necesitaba agregar a mis usuarios a la función de base de datos db_owner para permitirles asignar otros / nuevos usuarios a funciones de bases de datos fijas.
¿Existe alguna manera más clara de permitirme lograr lo que trato de hacer aquí, es decir, crear usuarios que puedan crear otros usuarios?
Intento crear un usuario de base de datos y de inicio de sesión de servidor SQL desde mi aplicación, junto con una fila de usuario de aplicación personalizada. Quiero que estos usuarios puedan crear otros usuarios, es decir, la aplicación controlará quién puede / no puede crear usuarios, pero necesito que todos los usuarios tengan permisos para crear inicios de sesión del servidor SQL y usuarios de la base de datos.
Obtuve los permisos de inicio de sesión del servidor funcionando, es decir, un usuario / inicio de sesión existente puede crear un nuevo inicio de sesión al agregar los inicios de sesión al rol de servidor ''securityadmin'', que otorga el privilegio ''ALTER ANY LOGIN''.
Traté de hacer lo mismo con los usuarios de la base de datos, agregándolos a la función de base de datos ''db_accessadmin'', que supuestamente concede el privilegio ALTER ANY USER, que se requiere para CREATE USER.
Sin embargo, cada vez que trato de crear un nuevo usuario de base de datos utilizando un usuario con los privilegios anteriores, obtengo una excepción de permisos.
He intentado otorgar manualmente el permiso ALTERA CUALQUIER USUARIO a un usuario en particular (GRANT ALTERA AL USUARIO AL demouser) pero esto tampoco funciona.
Esto parece muy peligroso, convirtiéndose fácilmente en una pesadilla de seguridad. Sin saber nada sobre por qué crees que esta es la mejor solución para lograr tu objetivo, realmente no puedo decirte que no lo hagas de esta manera, ¡pero guau! - Pensaría largo y tendido sobre si esto realmente es necesario. La telaraña de los usuarios parece que podría ser imposible de manejar desde una perspectiva de DBA.
¿No podría tener solo una cuenta de SQL que tenga los permisos para agregar usuarios, y la aplicación la usa cada vez para agregar nuevos usuarios? Esos usuarios no necesitarían la posibilidad de agregar otros usuarios. Tal vez esto no funcione para su objetivo específico, pero seguramente hay alguna otra manera.
Pero habiendo dicho todo eso ... no, en realidad no hay una manera más limpia. Al usuario se le deberían asignar los roles correctos para poder agregar más tarde otros usuarios.
Técnicamente, sí. Si es correcto o incorrecto ... no hay comentarios.
De todos modos, la seguridad de la base de datos se divide en 2 funciones:
- db_accessadmin para gestionar usuarios (o "ALTERAR CUALQUIER USUARIO" permiso como mencionaste)
- db_securityadmin le permite administrar las pertenencias de los roles y los permisos de los objetos (o el permiso "ALTER ANY ROLE")
Esto se menciona para sp_addrolemember .
En realidad, está cambiando el rol, no el usuario, ejecutando sp_addrolemember para que "ALTER ANY ROLE" sea suficiente sin tener derechos db_owner completos.
/*
TOPIC: create a login ,who can add other logins to databases (securityadmin server role)
*/
USE MASTER
GO
Create login securityTestLogin with password = ''@@somepassword123''
-----add this to server , this is server level security role -------
EXEC master..sp_addsrvrolemember @loginame = N''securityTestLogin'', @rolename = N''securityadmin''
--- first this login should be a user in database where we want to give other users access
USE HTDBA
GO
Create user securityTestLogin for login securityTestLogin
EXEC sp_addrolemember N''db_accessadmin'', N''securityTestLogin''
-- depends on your requriemtnt you might also want this permission too
--EXEC sp_addrolemember N''db_securityadmin'', N''securityTestLogin''
GO
------ Now we think about adding other users to different database roles -------------
/*
There is one gottcha , db_securityadmin role cannot add users to the fixed database roles ,only
db_owner can perform this action , but for security we don''t want to give this permission .
so we need a work around
Create a role with required permission and then add users to that role.
*/
--Create user defined database role Readers
EXEC sp_addrole DBUser
-- Add this role to fixeddbroles to get database level permission
EXEC sp_addrolemember db_datareader, DBUser
EXEC sp_addrolemember db_datawriter, DBUser
GO
--------READY TO TEST --------
------ we are using this sample login for test
use master
Go
Create login testlogin1 with password=''@@somepassword123''
use HTDBA
go
Create user testlogin1 for login testlogin1
--- now add this user to user created DBUser role .
EXEC sp_addrolemember DBUser, testlogin1
Un muy buen artículo sobre permisos de SQL:
http://www.sqlservercentral.com/articles/Security/sqlserversecurityfixeddatabaseroles/1231/