授予角色SQL Server数据库的用户创建用户并授予/改变的作用,但限制改变数据库对象

问题描述:

我们的应用程序需要两种类型的用户(每一个应用程序的用户需要进行数据库访问自己的凭据)授予角色SQL Server数据库的用户创建用户并授予/改变的作用,但限制改变数据库对象

  1. 联系

我们已经创建了一个用户General User具有下列权限一般用户:

  1. 可以浏览存储过程/函数,但不允许查看里面
  2. 只能选择表的代码,但不能插入/更新/删除存储过程的执行外

我创建了一个角色并补充General User它:

CREATE ROLE proc_executor 

GRANT EXECUTE TO proc_executor 
GRANT SELECT TO proc_executor 

现在我需要用下面的权限Admin角色:

  1. 持有General User所有角色,这已经是可用
  2. 创建新用户,无论是数据库和服务器
  3. 阿尔特角色添加新用户

有用于Admin一些限制。他们只能执行存储过程并从表中选择。

我的研究,人们已经建议增加角色像db_accessadmindb_securityadminsp_addrolemember(未找到),这是不足以创建新的用户,并同时打破了限制。

允许创建用户权限并且限制漫步存储过程代码似乎很棘手。 SA的许可持有我们,我们不能允许客户玩数据库。

任何人都可以帮我吗?

+0

你说什么“我们从'sa'user'创建了用户'General User'?用户可以通过登录创建,但不能通过“sa”登录创建任何用户 – sepupic

+0

我们通过用户(默认用户)登录并创建了另一个用户,包括数据库和服务器。 – aadhikari

+0

创建用户/登录时如何登录并不重要。你能确切地说明你做了什么,而不是你做了什么登录。什么登录/用户,你创建了什么权限,或者你什么都没有创建,你的问题是用户和创建什么权限。 – sepupic

为什么不单独创建应用程序的安全模式。你可以有如下表:

-- storing users details 
CREATE [dbo].[SecurityUsers] TABLE 
(
    [SecurityUserID] BIGINT 
    ,... 
    ,... 
); 

-- storing groups details 
CREATE [dbo].[SecurityGroups] TABLE 
(
    [SecurityGroupID] INT 
    ,[SecurityGroupName] NVARCHAR(128) 
    ,[SecurityGroupDescription] NVARCHAR(1024) 
); 

-- storing group-users mapping 
CREATE [dbo].[SecurityGroupsMembership] 
(
    [SecurityGroupID] INT 
    ,[SecurityUserID] BIGINT 
); 

的,你可以写在你的函数的乞讨security check或存储过程是这样的:

if user is not member of `update data` 
begin; 
    return; 
end; 

SQL Server 2016 SP1你甚至可以映射表等安全功能SELECT使用row-level security

您的结构可能更复杂 - 您可以查看安全策略或/和安全角色。您需要添加一个界面(可能)来设置用户权限/成员身份。

+0

我们希望限制用户浏览对象资源管理器。有了这个限制,用户不能漫步存储过程(代码)。应该允许它们执行,通过前端应用程序完成。我们已经做到了。但除此之外,我们需要获得许可才能创建用户以及上述限制。 – aadhikari