SQL Server 授予的权限不起作用

Posted

技术标签:

【中文标题】SQL Server 授予的权限不起作用【英文标题】:SQL Server Granted Permission not Working 【发布时间】:2021-02-06 02:25:57 【问题描述】:

用户在登录应用程序时遇到问题。错误是“对象'tablename',数据库'databasename,架构'dbo'的更新权限被拒绝。

用户已经拥有基于角色的权限,该角色已经允许其他用户正确登录,从而在“日志”表中进行必要的条目。

使用此代码检查用户时,

EXECUTE AS LOGIN = N'[AD UserName]';
SELECT 
    permission_name AS [Permission]
FROM fn_my_permissions(N'[ServerName]', N'DATABASE')
ORDER BY permission_name;
REVERT;

结果是:

CONNECT
EXECUTE
SELECT
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
VIEW ANY COLUMN MASTER KEY DEFINITION

我预计会这样:

CONNECT
DELETE
EXECUTE
INSERT
SELECT
UPDATE
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
VIEW ANY COLUMN MASTER KEY DEFINITION

我将插入、更新、删除和执行直接授予数据​​库用户。权限仍然没有显示插入、执行或删除,并且用户仍然无法登录。

我直接对表应用了权限。由于插入表时出现错误,用户再次无法访问应用程序。

此外,用户可以访问服务器上的其他数据库,但我无法找到为什么在此数据库上未正确应用用户授予的权限。

我在哪里可以找到是否由于服务器级别权限或其他我无法想到的想法而更改权限。

提前谢谢你

【问题讨论】:

也许权限被直接或通过角色成员身份拒绝。 DENY 优先于 GRANT。 登录名是否可能映射到不同名称的数据库用户? create user [domain\FooUser] from login [domain\FooUser] 是习惯性的,但没有什么可以阻止 create user [domain\FooUser] from login [domain\BarUser] 【参考方案1】:

问题是用户是一个组的一部分,该组在同一数据库上检查了 db_denywriter。

问题仍然是确定用户权限的最佳方法是什么,即使是通过组权限,被拒绝或授予。

缺少某些东西不应该等同于真或假。

谢谢!

【讨论】:

Deny 覆盖任何 grant 所以这是正确的。您还需要检查是否有拒绝

以上是关于SQL Server 授予的权限不起作用的主要内容,如果未能解决你的问题,请参考以下文章

授予数据库中的所有权限有啥作用?

OPENJSON 在 SQL Server 中不起作用?

SQL Server 交叉应用不起作用?

sql-server 堆栈查询 sql 注入更新查询不起作用

SQL Server 2008 - 合并脚本不起作用

SQL Server 2008 - CAST 到 nvarchar 不起作用