首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库权限

数据库权限
EN

Database Administration用户
提问于 2019-03-21 19:32:05
回答 2查看 379关注 0票数 2

我在服务器级别创建了一个名为TestUser的登录用户,该用户被分配给只读角色,现在我需要在MyDb上为TestUser登录创建一个用户。

代码语言:javascript
复制
USE [MyDB]
GO
CREATE USER [Test] FOR LOGIN [TestUser]
GO
GRANT SELECT TO [Test]
GO
DENY DELETE TO [Test]
GO
DENY INSERT TO [Test]
GO
DENY UPDATE TO [Test]
GO

一切都很好,但是当我编写测试用户创建的脚本时,我在任何地方都看不到我给出的脚本,并拒绝插入、删除和更新

EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-03-22 07:54:51

我在服务器级别创建了一个名为TestUser的登录用户,该用户被分配给只读角色。

没有任何fixed server role可以称为“只读角色”。

也许你的@@version >= 2014和你给了select all user securables你的登录?

如果是这样,则可以这样看待此服务器级权限:

代码语言:javascript
复制
select class_desc, permission_name, state_desc
from sys.server_permissions
where suser_name(grantee_principal_id) = 'Test';
---------------------------------------------------
--class_desc    permission_name state_desc
--SERVER    CONNECT SQL GRANT
--SERVER    SELECT ALL USER SECURABLES  GRANT

然后,您做了一些不必要的grant/deny,您不应该这样做。当您映射具有select all user securables的登录名时,该用户已经访问了此数据库中的任何数据,因此不需要附加的SELECT权限。

此外,不需要deny其他权限,因为新创建的user没有任何permission

但是,如果要检查它们是否为granted/denied,则应从sys.database_permissions中选择如下所示:

代码语言:javascript
复制
select class_desc, permission_name, state_desc
from sys.database_permissions
where user_name(grantee_principal_id) = 'Test';
---------------------------------------------------
--class_desc    permission_name state_desc
--DATABASE  CONNECT GRANT
--DATABASE  DELETE  DENY
--DATABASE  INSERT  DENY
--DATABASE  SELECT  GRANT
--DATABASE  UPDATE  DENY

您可以使用server level permissions / sys.database_permissions来编写sys.server_permissionsdatabase level permissions脚本,在简单的情况下,当可安全的是database时,脚本可以如下所示:

代码语言:javascript
复制
select state_desc +'  ' + permission_name + ' to Test'
from sys.database_permissions
where user_name(grantee_principal_id) = 'Test'
      and permission_name <> 'connect';

下面是要测试的完整脚本:

代码语言:javascript
复制
create login Test with password = '*****', check_policy = off;
grant select all user securables to Test;

select class_desc, permission_name, state_desc
from sys.server_permissions
where suser_name(grantee_principal_id) = 'Test';
---------------------------------------------------
--class_desc    permission_name state_desc
--SERVER    CONNECT SQL GRANT
--SERVER    SELECT ALL USER SECURABLES  GRANT

use MyDB;
create user Test from login Test;

select class_desc, permission_name, state_desc
from sys.database_permissions
where user_name(grantee_principal_id) = 'Test';
---------------------------------------------------
--class_desc    permission_name state_desc
--DATABASE  CONNECT GRANT

GRANT SELECT TO [Test]
GO
DENY DELETE TO [Test]
GO
DENY INSERT TO [Test]
GO
DENY UPDATE TO [Test]
GO

select class_desc, permission_name, state_desc
from sys.database_permissions
where user_name(grantee_principal_id) = 'Test';
---------------------------------------------------
--class_desc    permission_name state_desc
--DATABASE  CONNECT GRANT
--DATABASE  DELETE  DENY
--DATABASE  INSERT  DENY
--DATABASE  SELECT  GRANT
--DATABASE  UPDATE  DENY

select state_desc +'  ' + permission_name + ' to Test'
from sys.database_permissions
where user_name(grantee_principal_id) = 'Test'
      and permission_name <> 'connect';
票数 0
EN

Database Administration用户

发布于 2019-03-21 19:39:58

很可能是因为您正在使用generate脚本方法来这样做。

我建议使用开源DBA工具查看权限或导出。

别名:

简要说明

将用户创建及其权限导出到to文件或主机。

描述

将用户创建及其权限导出到to文件或主机。导出包括用户、创建和添加角色(S)、数据库级权限、对象级权限。

示例:

PS C:> Export sqlserver2014a -User User1,User2 -Path C:\temp\users.sql

只将用户User1和User2从sqlserver2014a导出到文件C:\temp\users.sql

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/232788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档