我们的应用程序需要两种类型的用户(每个应用程序用户都需要自己的凭据才能访问数据库)
我们创建了一个具有以下权限的用户General User
:
我创建了一个角色,并为其添加了General User
:
CREATE ROLE proc_executor
GRANT EXECUTE TO proc_executor
GRANT SELECT TO proc_executor
现在我需要具有以下权限的Admin
角色:
General User
的所有角色,已经可用 Admin
有一些限制。它们只能执行存储过程并从表中进行选择。
我研究过,人们建议添加db_accessadmin
,db_securityadmin
,sp_addrolemember
(未找到)等角色,这不足以创建新用户并同时打破限制。
允许创建用户权限并同时限制漫步存储过程代码似乎很棘手。 SA持有我们的权限,我们不允许客户端使用数据库。
任何人都可以帮助我吗?
答案 0 :(得分:0)
为什么不单独创建应用程序的安全架构。您可以拥有以下表格:
-- 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
中,您甚至可以使用row-level security在表SELECT
上映射此类安全功能。
您的结构可能更复杂 - 您可以表安全策略或/和安全角色。您需要添加一个接口(可能)来设置用户权限/成员资格。