AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 300421
Accepted
Racer SQL
Racer SQL
Asked: 2021-10-01 13:31:13 +0800 CST2021-10-01 13:31:13 +0800 CST 2021-10-01 13:31:13 +0800 CST

表上的 INSERT 被拒绝。但登录有权限

  • 772

我正在运行从数据库 X 到数据库 Y 的过程。

在数据库 Y 上应该有来自用户的插入。

在此处输入图像描述

在这张图片中,第一列是登录名,第二列是拥有所有必要权限的角色(它在我们需要的表上有 INSERT)。

登录名已正确分配给角色,并且该角色具有所有必要的权限。

但是当我执行该过程时,我收到了那些著名的错误:

Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 165 [Batch Start Line 2]
The INSERT permission was denied on the object 'XXXXXXXXXXX', database 'DB', schema 'dbo'.
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 484 [Batch Start Line 2]
The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 527 [Batch Start Line 2]
The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 570 [Batch Start Line 2]
The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.

我创建了另一个测试登录,提供了完全相同的权限并且它工作。

如何找到阻止此登录的插入的内容?我什至跑了一个跟踪,看看我是否能找到更多的错误,在 eventviewer 上也没有。

登录没有明确的权限。它只是具有权限的角色的成员身份。

角色权限正确:

在此处输入图像描述

编辑:

自从重新创建 Windows 登录并重做所有权限以来,我尝试了一切。我注意到的是:

我可以创建一个登录名(使用密码的 sql 登录名)并且它有效。

我尝试使用原始 Windows 登录名在表中插入数据,但失败了,然后我将其从 ROLE 中删除并授予它 INSERT 权限,但它仍然失败。即使对数据库具有插入权限,它也无法插入数据。

permissions sql-server-2014
  • 2 2 个回答
  • 535 Views

2 个回答

  • Voted
  1. Best Answer
    Solomon Rutzky
    2021-10-02T12:01:06+08:002021-10-02T12:01:06+08:00

    如果问题出在 Windows 登录,使用 SQL Server 登录进行测试将无济于事。这是因为 Windows 登录能够通过多个来源(本身和/或一个或多个 Windows 组)进行身份验证。

    Windows 登录如何进行身份验证?

    • 直接(即登录有一个条目sys.sys.server_principals),
    • 通过一个或多个 Windows / AD 组(登录在 中没有条目sys.server_principals,但是一个或多个在 中有条目的组的成员sys.server_principals),
    • 或两者?

    对于 Windows 登录,将查看所有可能的身份验证方式中的所有GRANTs 和s。DENY即使在 SQL Server 中为此 Windows 登录创建了显式登录,也不会取消或优先于与它们所属的任何 Windows 组关联的任何权限,这些权限也被列为登录。可能是一个或多个 Windows / AD 组中的成员具有某种DENY或其他限制,并且这些限制优先于GRANTs。NET USER {login}通过命令提示符列出组。

    OP 回复:

    使用EXEC xp_logininfo 'DOMAIN\LOGIN','all';我可以找到Permission path指向一个带有 DENY 的组。!!!

    这并不能消除问题,但它确实确定了问题的原因,因此现在有望得到解决。

    一种可能的解决方案是使用模块签名(链接到我的信息站点),尽管我必须进行测试以查看它如何处理DENY优先级的 a 。无论哪种方式,您都不需要弄乱角色和对对象的直接权限,因此即使遇到由DENY.

    • 1
  2. Aleksey Vitsko
    2021-10-03T02:25:59+08:002021-10-03T02:25:59+08:00

    使用ScriptLoginPermissions存储过程,将其部署到任何用户数据库:

    https://github.com/aleksey-vitsko/Database-Administrator-Tools/blob/master/Permissions%20-%20ScriptLoginPermissions.sql

    运行它指定登录名:

    exec ScriptLoginPermissions 'domain\account.name'
    

    除了显示此帐户的所有权限外,此 SP 还将显示组成员身份,包括 AD/Windows 组

    然后您应该检查是否有任何 AD 组对相关表具有 DENY 权限
    这次运行 SP 指定组名:

    exec ScriptLoginPermissions 'domain\group.name'
    
    • 0

相关问题

  • 当我是 DBOwner 时,SQL Server 权限被拒绝错误?

  • 如果我没有 mysql.user 的 SELECT 权限,是否可以找到 MySQL 变量的值?

  • 如何在不访问数据库“mysql”的情况下检索授予的权限?

  • 来自不同子网的 2 台主机的 1 个 MySQL 用户

  • 你能在 MySQL 中“su -”吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve