Sql server 作为db_所有者和授予所有人之间的区别是什么?
我一直在使用下面的SQL创建用户、登录名和数据库Sql server 作为db_所有者和授予所有人之间的区别是什么?,sql-server,database,tsql,Sql Server,Database,Tsql,我一直在使用下面的SQL创建用户、登录名和数据库 USE master; GO CREATE DATABASE TEST; GO USE TEST; GO CREATE LOGIN TEST_USER WITH PASSWORD = 'password'; EXEC sp_defaultdb @loginame='TEST_USER', @defdb='TEST' CREATE USER TEST_USER FOR LOGIN TEST_USER WITH DEFAULT_SCHEMA = DB
USE master;
GO
CREATE DATABASE TEST;
GO
USE TEST;
GO
CREATE LOGIN TEST_USER WITH PASSWORD = 'password';
EXEC sp_defaultdb @loginame='TEST_USER', @defdb='TEST'
CREATE USER TEST_USER FOR LOGIN TEST_USER WITH DEFAULT_SCHEMA = DBO;
EXEC sp_addrolemember 'db_owner','TEST_USER'
GO
GRANT ALL TO TEST_USER;
GRANT ALTER ON SCHEMA::dbo TO TEST_USER
GO
当被问到时,我发现自己无法解释让我的用户成为数据库所有者(为了创建/更改/删除表等)之间的区别:
并将所有权限授予用户,我认为这基本上赋予了相同的权限
GRANT ALL TO TEST_USER;
它们是一样的吗?还是我母亲经常说的话是真的:你可以把马牵到水边,但这并不意味着他就是DBA
抢劫
:)不能拒绝安全设备的所有者的权限。但是被授予全部权限的用户仍然可以通过在安全数据库上的显式拒绝来拒绝(拒绝优先于所有/任何权限)。因此,作为组Foo成员的用户可以拥有通过组成员资格授予的所有权限,但如果他也是组Bar的成员,并且被拒绝在表X上选择,则该用户将被拒绝从所述表中选择。如果用户是表X的所有者,那么拒绝不会影响他。这适用于任何级别的任何对象,包括数据库所有权和dbo
这可能是授予ALL和所有权之间的区别,但请注意,固定角色
db_所有者
的成员身份不同于成为dbo
。具体来说,组不拥有安全文件,用户拥有(或者至少应该是这样……但我离题了)。不能拒绝安全文件的所有者的权限。但是被授予全部权限的用户仍然可以通过在安全数据库上的显式拒绝来拒绝(拒绝优先于所有/任何权限)。因此,作为组Foo成员的用户可以拥有通过组成员资格授予的所有权限,但如果他也是组Bar的成员,并且被拒绝在表X上选择,则该用户将被拒绝从所述表中选择。如果用户是表X的所有者,那么拒绝不会影响他。这适用于任何级别的任何对象,包括数据库所有权和dbo
这可能是授予ALL和所有权之间的区别,但请注意,固定角色
db_所有者
的成员身份不同于成为dbo
。具体地说,组不拥有安全性,用户拥有(或者至少应该是这样的……但我离题了)。除了在SQL Server中所有者不受拒绝之外。(DENY ALL
和REVOKE ALL
也不推荐使用。)
此选项已弃用,仅为后向使用而维护
兼容性。它不会授予所有可能的权限。授予
全部等同于授予以下权限
- 如果安全性是数据库,则表示备份数据库、备份日志、, 创建数据库、创建默认值、创建函数、创建过程、, 创建规则、创建表和创建视图
- 如果securable是一个标量函数,则表示执行和 参考资料
- 如果securable是表值函数,则表示删除、插入、, 引用、选择和更新
- 如果安全性是一个存储过程,则执行所有方法
- 如果安全表是表,则表示删除、插入、引用、, 选择,然后更新
- 如果安全性是视图,则表示删除、插入、引用、, 选择,然后更新
在SQL Server中,除了所有者不受拒绝之外,您还可以
授予所有
,而无需使用WITH GRANT选项
。(DENY ALL
和REVOKE ALL
也不推荐使用。)
此选项已弃用,仅为后向使用而维护
兼容性。它不会授予所有可能的权限。授予
全部等同于授予以下权限
- 如果安全性是数据库,则表示备份数据库、备份日志、, 创建数据库、创建默认值、创建函数、创建过程、, 创建规则、创建表和创建视图
- 如果securable是一个标量函数,则表示执行和 参考资料
- 如果securable是表值函数,则表示删除、插入、, 引用、选择和更新
- 如果安全性是一个存储过程,则执行所有方法
- 如果安全表是表,则表示删除、插入、引用、, 选择,然后更新
- 如果安全性是视图,则表示删除、插入、引用、, 选择,然后更新
您可以
授予所有
,而不必同时使用WITH GRANT选项
谢谢您,这是一个非常清楚的解释。作为一个拥有者,err对该物品拥有不可否认的权利,可以拒绝授予。这也解释了为什么我以前读到过,在生产系统中,将所有权授予用户是一种安全措施,在生产系统中,您希望能够控制用户能做什么/不能做什么。出于某种原因,我无法单击此帖子上的勾号。。我将稍后再试-这是我感激地接受的答案。:)谢谢你,这是一个非常清楚的解释。作为一个拥有者,err对该物品拥有不可否认的权利,可以拒绝授予。这也解释了为什么我以前读到过,在生产系统中,将所有权授予用户是一种安全措施,在生产系统中,您希望能够控制用户能做什么/不能做什么。出于某种原因,我无法单击此帖子上的勾号。。我将稍后再试-这是我感激地接受的答案。:)感谢Catcall——我知道这一点;MS Server每次使用时都会不断提醒我。:)感谢Catcall——我知道这一点;MS Server每次使用时都会不断提醒我。:)
GRANT ALL TO TEST_USER;