我有一个数据库,我想限制访问3名个人。 我以为我可以做到以下几点:
当我尝试执行第3步时,出现以下错误:
Msg 15353, Level 16, State 1, Line 1 An entity of type database cannot be owned by a role, a group, an approle, or by principals mapped to certificates or asymmetric keys.
我试图通过IDE, sp_changedbowner sproc和ALTER AUTHORIZATION命令来做到这一点,每次都得到相同的错误。
在searchMSDN和Google之后,我发现这个限制是devise的。 太棒了,这很有用。 谁能告诉我:
其他可能相关的信息:
为什么不允许这样做,请阅读SQL Server:Windows组,默认模式和其他属性 。 总结这篇文章,如果允许DEFAULT_SCHEMA到一个组,那么属于两个独立组的login的默认模式应该是什么? 这是主要标识和次要标识之间的区别,并且是有原因的。
如果要控制“dbo”模式的权限,则只需为本地组创build一个login名,然后为该组创build一个用户数据库,最后将schema :: dbo的CONTROL授予此用户。 这将允许3个人(以及本地组中的任何其他用户)完全控制dbo模式中的任何内容。 他们将能够改变,select和更新dbo.schema中的任何对象,但他们将无法创build新的对象(除非明确授予)。 如果您希望他们完全控制数据库中的任何内容,而不仅仅是dbo架构中的现有对象,那么只需将本地组用户添加到“db_owner”angular色即可。
如果你想使用模式作为命名空间,并保存你的开发者明确使用两个部分的名字,那么…只是不要。 使用两部分名称限定符不会造成任何伤害,只会增加好处。
至于#2,我们通过为特定数据库创build自定义数据库angular色来解决这个问题。
例如,我有3个开发人员的域用户。 我希望他们有特殊的访问数据库。 我们创build一个域组,并把它们放在里面。 然后在SQL中创build关联的帐户。 对于那个数据库(安全>angular色>数据库angular色),我们创build一个新的卷,并将该login添加到卷。
该卷可以为数据库中的特定项目提供权限,可以从其他angular色(如db_owner)等添加权限。 这很灵活。
我经常听到有人抱怨这样做。 主要是因为如果他们有“数百”的数据库对象需要太多的时间,但是快速添加一切或个别对象是相当灵活的。 除此之外,这是一个糟糕的行政pipe理问题,而不是特定的授予权限。
如果它是多个组的一部分,则限制与不能为特定login定义默认模式有关。
假设他们确实允许。
如果domaingroup DOMAIN \ xx已被添加到本地组SERVER \ xx1 – >在sqlsecurity映射到serverlogin'xx1'依次映射到db-login'xx1'与默认模式'xx1'和本地组SERVER \ xx2 – > …默认架构'xx2'
假设DOMAIN \ xx的用户login并发出语句
CREATE table yy
该表是在模式xx1还是模式xx2中创build的? 答案=未定义
因此没有组的默认模式。 但用户仍然可以发出
CREATE table xx1.yy
和
CREATE table xx2.yy