对登录用户的sql权限,以进一步创建登录和应用程序角色

时间:2011-03-02 06:08:12

标签: c# .net sql sql-server sql-server-2005

我正在使用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个应用程序角色

如何向用户授予这些任务的权限?请帮忙。

1 个答案:

答案 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