sql-server – CREATE DATABASE与CREATE ANY DATABASE权限
在Microsoft SQL Server中,CREATE DATABASE和CREATE ANY DATABASE权限之间有什么区别?
我无法找到权威的答案.我能推断的最好的是(a)CREATE ANY意味着我可以创建数据库以供另一个用户拥有,而使用CREATE我不能,或者(b)Sybase /早期SQL Server时代的原始权限是CREATE ANY和CREATE是ANSI一致性的别名. 解决方法我相信我找到了权威的答案,在本文提供的表格中有很大帮助: http://msdn.microsoft.com/en-us/library/ms178569.aspx.看起来CREATE DATABASE确实是ANSI SQL兼容权限,而CREATE ANY DATABASE是MSSQL专有服务器权限.但是,两者并不相同.事实上,两者之间有一个相当重要的区别,我通过尝试发现了这一点.它们都是权限,但CREATE DATABASE仅查询当前使用的数据库的安全上下文,而CREATE ANY DATABASE可以查找SQL Server上的登录列表.这似乎是实现的,因为ANSI SQL服务器的一般期望是在某些主系统数据库中赋予权限,并且该数据库中的用户被授予权限.然后,新数据库的默认行为是咨询master以查看它应该继承的权限. (SQL 101,我知道,但这里的确如此.) 因此,当您授予CREATE DATABASE时,您实际上必须让master中的用户授予此权限.如果你尝试这个,它可以工作(在master中创建一个用户,授予它创建数据库,然后你可以创建数据库).但是,通过授予创建任何数据库(或授予角色dbcreator),您不需要成为master中的文字用户. 要进一步说明这两个权限之间的区别,请观察通过在主服务器与另一个数据库上授予用户CREATE DATABASE返回的不同消息,然后冲洗并重复以获取CREATE ANY DATABASE权限. use master; GRANT CREATE DATABASE to TestUser
发生此错误的原因是用户TestUser尚未在master数据库中.这是一个数据库级权限 – 它没有上下文可以超出所选数据库并查找登录名或用户.请注意,如果先在master中创建用户,则此命令会成功,您可以创建数据库,就像创建了CREATE ANY DATABASE一样. use master; GRANT CREATE ANY DATABASE to TestUser
这成功是因为,作为专有的Microsoft SQL Server权限,CREATE ANY DATABASE可以查询SQL实例的登录列表,而不仅仅是当前使用的数据库中的用户. use test; GRANT CREATE DATABASE to TestUser
这证明了我对第一个例子的解释的一致性.请注意以下查询及其产生的错误消息.如果您首先在此数据库中创建用户,则不会收到此错误消息(请参阅上一个查询). use test; GRANT CREATE ANY DATABASE to TestUser
如第二个查询所示,CREATE ANY DATABASE查询登录列表,我已经创建了此登录名.因此,虽然SQL Server承认用户的存在,但它仍然出错,因为我试图在除master之外的某处授予服务器级权限,这在MSSQL中是不允许的. use test; create user TestUser; grant create database to TestUser
既然有一个用户申请CREATE DATABASE,我会收到一般错误消息,除了master之外,你不能在任何地方提供服务器级权限,因为那是SQL Server存储这些权限的地方. 嗯,这很有趣. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 如何根据pyspark中的某些条件在列中的每一行前面添加
- sql-server – Sql Server STUFF – 应该使用position> 800
- SQLSERVER存储过程如何写带参数的游标
- 完美解决MSSQL"以前的某个程序安装已在安装计算机上创建挂
- MySQL中interactive_timeout和wait_timeout的区别
- 详解SQL中Group By的用法
- SQL SERVER 表与表之间 字段一对多sql语句写法
- rdp – 可以拆分访问数据库导致打印机和报告问题吗?
- .NET Decimal =什么在SQL中?
- SqlBulkCopy 快速插入数据到SqlServer 数据库