1
2
如前所述,如果有人可以分发权限,他们可以将权限分发给自己(或虚拟帐户)。我不确定SQL Server中是否有提供“让用户权限小于我”的技巧。 我的方法是使用存储过程。 创建一个存储过程,该存储过程为指定用户提供 具体的 权利或一组权利(这些权利是允许普通用户拥有的权利)。然后让开发人员执行对该存储过程的访问。实际上,您使用存储过程来创建一个有限版本的grant,同时保留完整的grant命令。 |
2
3
您可以使它们成为“db_securityadmin”数据库角色的成员 |
3
1
如果有人可以给别人权限,他也可以给自己做他想做的事情的权限。那么这有什么好处呢?可能我不理解你的处境。 |
4
1
对象的所有者可以授予这些对象的权限。如果您的开发人员不需要授予诸如创建表权限之类的权限,那么您可能能够授予他们您希望他们授予权限的对象的所有权。 |
5
0
正如Stefan所说,授予他们授予权限实际上会授予他们所有的权限,因为如果他们想做什么,他们所要做的就是授予他们自己做这件事的权限。 不过,您可以考虑给开发人员一个用于管理数据库的第二个用户帐户,而不是将开发人员视为敌人。通常不给开发人员任何生产许可,至少在他们的开发帐户上是这样。 |
6
0
使用“grant execute on”可以完成对存储过程等对象的权限设置。去; 但是,您也可能希望在登录和用户级别授予安全权限。您将只想为需要访问的对象(如执行)确定并授予必要的权限。考虑使用“执行为”功能,该功能允许模拟其他用户来验证执行代码所需的权限,而无需授予所有基础对象(例如表)的所有必要权限。可添加到存储过程、函数、触发器等的执行方式。 在存储过程中按如下方式添加到代码中:创建过程dbo.myprocedure,并将execute作为owner 在这种情况下,您将模拟被调用模块的所有者。您还可以模拟自我,或用户创建或更改模块,或…专横的调用者,这将使模块接受当前用户的权限,或…模拟所有者,该所有者将获得被调用过程的所有者的权限,或者…模拟“用户名”,它将模拟特定用户或…用模拟“登录名”将模拟特定的登录名。 大多数情况下,您只需要授予存储过程的执行权限,然后将权限授予存储过程中引用的所有对象。 这样,您就不需要授予隐式权限(例如:更新数据或调用其他进程)。所有权链接为您处理这个问题。这对于动态SQL或需要创建提升的安全任务(如创建表)特别有用。作为一个方便的工具来考虑这些问题。 这个例子可能有助于澄清所有这些: 创建一个名为noprivuser的用户,该用户具有对数据库的公共访问权限(例如dbadb) 使用[master]创建登录名[noprivuser],密码=n'abc5%,默认值为[dbadb],检查到期值=on,检查策略=on go使用[dbadb]创建用户[noprivuser]登录名[noprivuser]go 注意:此过程的创建者或所有者需要在目标数据库中创建表权限。 使用dbadb go create procedure dbo.myprocedure,将execute as owner视为不存在(select*from sys.objects where object_id=object_id(n'[dbo].mytable')并键入(n'u'))create table mytable(pkid int,column1 char(10))insert into mytable values(1,'abcdef') 去 将dbo.myprocedure上的exec授予noprivuser;go --现在以noprivuser身份登录数据库服务器并运行以下命令。 使用DBADB围棋 执行dbo.myprocedure (1行受影响) 现在尝试在以noprivauser身份登录时从新表中进行选择。 您将获得以下信息: 从我的表格中选择“*”,开始 msg 229,level 14,state 5,line 1对象'mytable',数据库'dbadb',架构'dbo'的select权限被拒绝。 这是预期的,因为您在以noprivuser身份登录时仅在所有者的安全上下文下运行该过程。 没有权限实际读取表。只执行创建和插入行的过程。 使用EXECUTEAS子句,存储过程将在对象所有者的上下文中运行。此代码成功创建dbo.mytable,并且成功插入行。在本例中,用户“noprivuser”绝对没有被授予修改表或读取或修改此表中任何数据的权限。 它只具有完成此特定任务所需的权限,此任务是在本过程的上下文中编码的。 这种创建存储过程的方法非常有用,它可以执行需要提升的安全权限而不永久分配这些权限的任务。 |
7
0
我发现db-owner角色最危险的方面是,如果您对某个权限发出拒绝,那么该角色的成员可以将其授予自己。我刚开始读这个,我正在测试这个
到目前为止,我发现
Here 是可以拒绝或授予的权限列表: |