我正在使用SQL Server Express 2005。
我只有一个数据库可供使用&仅在此数据库上创建登录,用户和授予权限。
我创建了一个数据库shopDB。
然后登录shopDBLogin。
然后我选择了shopDB&为shopDBLogin创建了一个用户shopDBUser。代码是:
create database shopDB
use shopDB
create login shopDBLogin with password='_' , default_database = shopDB
use shopDB
create user shopDBUser for login shopDBLogin
现在,我想授予shopDBUser执行以下任务的权限:
- 创建3个新登录L1,L2,L3&这些登录中有3个新用户U1,U2,U3
- 授予U2,U3仅在sql数据库中插入的权限
- 创建3个应用程序角色
如何向用户授予这些任务的权限?请帮忙。
答案 0 :(得分:3)
我必须使用db_securityadmin。
使用sp_addrolemember分发角色。
示例:
EXEC sp_addrolemember 'db_securityadmin', 'shopDBUser'
如果你只是想让shopDBUser能够为他自己的用户制作“子用户”:你不能用角色做到这一点。我建议创建一个执行此操作的存储过程,授予存储的prcedure提升权限,然后授予shopDBUser权限以执行存储过程。
当然,您必须自己进行必要的检查。主要是因为我认为在SQL中根本不知道子用户的概念。
编辑: 也许将子用户的概念实现为单独的UserInfo表。见下面的例子:
CREATE PROCEDURE [dbo].[stp_CreateSubUser]
(
@SubUser nvarchar(200),
@Pass nvarchar(200)
)
AS
BEGIN
EXEC('create login ' + @SubUser + ' with password=''' + @Pass + ''', default_database = shopDB')
EXECUTE AS OWNER
EXEC('create user ' + @SubUser + ' for login ' + @SubUser )
EXECUTE AS OWNER
EXEC sp_addrolemember 'db_datareader', @SubUser
EXECUTE AS OWNER
EXEC sp_addrolemember 'db_datawriter', @SubUser
EXECUTE AS OWNER
INSERT [dbo].[UserInfo]
([UserName],[ParentUserName])
VALUES
(@SubUser, USER)
END