Sql 无法授予、拒绝或撤消对sa、dbo、实体所有者、信息\u架构、sys或您自己的权限
今天我一直在读关于Sql 无法授予、拒绝或撤消对sa、dbo、实体所有者、信息\u架构、sys或您自己的权限,sql,sql-server,Sql,Sql Server,今天我一直在读关于用户,登录,创建,授予,等等的书,但我不明白背后的逻辑 据我所知,登录是对服务器级别的访问,而用户是对数据库级别的访问。这是正确的吗?如果是,那真正的意思是什么 我把服务器想象成一个有很多文件柜的房间。登录允许我访问房间,但不一定要访问部分/所有机柜,而用户允许我访问特定机柜。如果这个类比是正确的,那么执行以下命令的意义是什么 CREATE USER testusername WITHOUT LOGIN 我的意思是,让一个拥有“钥匙”的用户打开一些橱柜(由命令GRANT授予的
用户
,登录
,创建
,授予
,等等的书,但我不明白背后的逻辑
据我所知,登录
是对服务器级别的访问,而用户
是对数据库级别的访问。这是正确的吗?如果是,那真正的意思是什么
我把服务器想象成一个有很多文件柜的房间。登录
允许我访问房间,但不一定要访问部分/所有机柜,而用户
允许我访问特定机柜。如果这个类比是正确的,那么执行以下命令的意义是什么
CREATE USER testusername WITHOUT LOGIN
我的意思是,让一个拥有“钥匙”的用户打开一些橱柜(由命令GRANT
授予的钥匙)但不让他进入房间有什么意义
是否有允许用户访问房间中所有文件柜的“主钥匙”
最后我想看看这是怎么回事,但我遇到了一些问题
我尝试了以下方法:
CREATE LOGIN testl
WITH PASSWORD = 'test'
CREATE USER test
FOR LOGIN testl
GRANT SELECT, INSERT, UPDATE ON Doctor TO test
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
EXECUTE AS USER = 'test'
SELECT *
FROM Doctor
INSERT INTO Doctor VALUES ('Johnson', 'Jack',2)
UPDATE Doctor SET Dep_ID=2 WHERE Doc_ID=71
SELECT *
FROM Doctor
REVERT
ROLLBACK
REVOKE SELECT, UPDATE, INSERT ON Doctor FROM test
/*DROP USER test
DROP LOGIN testl*/
所有这些似乎都正常工作,但在回滚此事务并尝试从Test
中撤消特权后,我出现以下错误:
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Msg 15151, Level 16, State 1, Line 2
Cannot drop the user 'test', because it does not exist or you do not have permission.
Msg 15151, Level 16, State 1, Line 3
Cannot drop the login 'testl', because it does not exist or you do not have permission.
然后,我尝试删除登录名和用户,但出现以下错误:
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Msg 15151, Level 16, State 1, Line 2
Cannot drop the user 'test', because it does not exist or you do not have permission.
Msg 15151, Level 16, State 1, Line 3
Cannot drop the login 'testl', because it does not exist or you do not have permission.
我做错了什么?你的房间和橱柜类比基本上是正确的。登录是服务器(或者更准确地说是SQL实例)级主体,而用户是数据库级主体 没有登录的用户可以被认为是被锁在房间里的文件管理员(从不从外面进入房间),并被分配到一个文件柜。没有登录名的用户的安全上下文仅限于该数据库 您的“主密钥”类比映射到服务器角色。例如,作为sysadmin服务器角色成员的登录名可以完全控制SQL实例上的所有数据库,并自动映射到所有数据库中的dbo用户
运行脚本后出现错误的原因是您仍然在测试用户的上下文中运行。您需要执行
REVERT
返回到原始安全上下文。您的房间和橱柜类比基本正确。登录是服务器(或者更准确地说是SQL实例)级主体,而用户是数据库级主体
没有登录的用户可以被认为是被锁在房间里的文件管理员(从不从外面进入房间),并被分配到一个文件柜。没有登录名的用户的安全上下文仅限于该数据库
您的“主密钥”类比映射到服务器角色。例如,作为sysadmin服务器角色成员的登录名可以完全控制SQL实例上的所有数据库,并自动映射到所有数据库中的dbo用户
运行脚本后出现错误的原因是您仍然在测试用户的上下文中运行。您需要执行
REVERT
返回到原始安全上下文。您可以共享整个代码吗steps@TheGameiswar我已经编辑了这篇文章,添加了脚本的最后一部分。我运行了你的整个脚本,无法重新编写该问题。你可以共享你的全部代码吗steps@TheGameiswar我已经编辑了这篇文章,添加了脚本的最后一部分。我运行了整个脚本脚本,我无法重新编写该问题