2008-12-16 7 views
3

J'essaye de créer un nom de connexion de serveur de SQL et un utilisateur de base de données à partir de mon application, avec une rangée d'utilisateur d'application faite sur commande. Je souhaite que ces utilisateurs puissent créer d'autres utilisateurs, c'est-à-dire que l'application contrôlera qui peut/ne peut pas créer d'utilisateurs, mais j'ai besoin de tous les utilisateurs pour créer des connexions SQL Server et des utilisateurs de base de données. J'ai les autorisations de connexion au serveur qui fonctionnent - un utilisateur/login existant peut créer un nouveau login - en ajoutant les connexions au rôle serveur 'securityadmin' - qui accorde le privilège 'ALTER ANY LOGIN'. J'ai essayé de faire la même chose avec les utilisateurs de la base de données - en les ajoutant au rôle de base de données 'db_accessadmin' - qui est censé accorder le privilège ALTER ANY USER, qui est requis pour CREATE USER.Autorisations requises pour 'CREATE USER' dans SQL Server 2005?

Cependant chaque fois que j'essaie de créer un nouvel utilisateur de base de données en utilisant un utilisateur avec les privilèges ci-dessus, je reçois une exception d'autorisations.

J'ai essayé accorder manuellement l'autorisation ALTER ANY USER à un utilisateur particulier (GRANT MODIFIE tout utilisateur de demouser), mais cela ne fonctionne pas non plus.

Répondre

1

Mon mauvais - j'ai trouvé la question - il n'a pas été l'instruction CREATE utilisateur qui a été un échec, mais un appel à la suite de « sp_addrolemember ». Cela nécessite d'autres autorisations que je n'attribuais pas.

En particulier, je besoin d'ajouter mes utilisateurs au rôle de base de données db_owner afin de leur permettre d'attribuer d'autres/nouveaux utilisateurs à des rôles de base de données fixes.

Y at-il un moyen plus propre pour me permettre de réaliser ce que je suis en train de faire ici - à savoir créer des utilisateurs qui sont autorisés à créer d'autres utilisateurs?

+0

utilisateurs ayant comme propriétaires est très dangereux. Vous avez un défaut de sécurité majoprof ici. Faites attention. – Brody

0

Ceci semble très dangereux, devenant facilement un cauchemar de sécurité. Ne sachant rien de pourquoi vous pensez que c'est la meilleure solution pour atteindre votre objectif, je ne peux pas vraiment vous dire de ne pas le faire de cette façon, mais wow !! - Je réfléchirais longuement à la question de savoir si c'est vraiment nécessaire. La toile d'araignée des utilisateurs semble juste qu'il pourrait être rapidement impossible à gérer du point de vue d'une DBA.

N'êtes-vous pas être en mesure d'avoir un seul compte SQL qui a les autorisations pour ajouter des utilisateurs, et l'application utilise chaque fois que pour ajouter de nouveaux utilisateurs? Ces utilisateurs n'auraient alors pas besoin de pouvoir ajouter d'autres utilisateurs. Peut-être que cela ne fonctionnera pas pour votre objectif spécifique, mais il y a sûrement un autre moyen.

Mais après avoir dit tout ça ... non, il n'y a pas vraiment de manière plus propre. L'utilisateur devrait être assigné aux rôles corrects afin d'avoir la possibilité d'ajouter plus tard d'autres utilisateurs.

6

Techniquement, oui. Que ce soit vrai ou faux ... aucun commentaire.

Quoi qu'il en soit, la sécurité de base de données est divisé en 2 fonctions:

  • db_accessadmin pour gérer les utilisateurs (ou « ALTER ANY USER » l'autorisation que vous avez mentionné)
  • db_securityadmin vous permet de gérer les rôles des adhésions et des autorisations d'objet (ou "permission ALTER ANY ROLE"

Ceci est mentionné pour sp_addrolemember.

Vous êtes en train de changer le rôle, pas l'utilisateur, en exécutant sp_addrolemember afin que "ALTER ANY ROLE" soit suffisant sans avoir les droits complets de db_owner.

0
/* 
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 très bon article sur les autorisations SQL:

http://www.sqlservercentral.com/articles/Security/sqlserversecurityfixeddatabaseroles/1231/

Questions connexes