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
    • 最新
    • 标签
主页 / user-50728

Steve Mangiameli's questions

Martin Hope
Steve Mangiameli
Asked: 2015-12-08 10:40:42 +0800 CST

你如何在隐藏资源数据库 mssqlsystemresource 上 GRANT SELECT?

  • 4

运行此查询时出现错误:

    SELECT 
      dependencies.referencing_id as object_id,
      dependencies.referencing_minor_id as column_id,
      dependencies.referenced_id AS referenced_object_id,
      RTRIM(referenced_objects.type) AS referenced_type
    FROM 
      sys.sql_expression_dependencies AS dependencies
    JOIN sys.objects AS referenced_objects WITH(NOLOCK) ON referenced_objects.object_id = dependencies.referenced_id
    WHERE dependencies.referencing_id != dependencies.referenced_id

错误:

对象“sql_expression_dependencies”、数据库“mssqlsystemresource”、模式“sys”的 SELECT 权限被拒绝。

该登录名仅具有 PUBLIC 服务器角色的成员资格,并被授予查看任何数据库和查看任何定义的权限。我为我正在比较的数据库添加了一个具有 PUBLIC 数据库角色成员身份的用户。我认为服务器级别的权限就足够了,但我错了。除了 2014 数据库之外,我还在 2008R2 数据库上执行此操作。

在 2014 年的数据库中,我还授予了服务器级别权限 SELECT ALL USER SECURABLES。错误仍然存​​在。

我在数据库上授予了用户 SELECT。错误仍然存​​在。

我删除了 SELECT 权限并将用户添加到 data_reader 数据库角色。查询已解决,但未返回任何数据(与系统管理员运行相同的查询返回 130 多行)。现在我完全困惑了。

我在 sys.sql_expression_dependencies 上明确授予用户 SELECT 权限,结果与上述相同。

在研究了这些权限之后,共识似乎是在数据库上向用户授予 SELECT 与将用户添加到 data_reader 角色相同。但显然情况并非如此。我想创建一个具有最小权限集的登录/用户来实现比较。

如何在不授予对整个数据库的 data_reader 访问权限的情况下授予对 mssqlsystemresource 中 sys.sql_expression_dependencies 视图的访问权限?有没有办法只在 mssqlsystemresource 上授予 SELECT ?

**注意 - 我在 SE 上阅读了有关 mssqlsystemresource 的其他几篇文章,但它们与此无关:

  • 我没有拒绝任何分配给此登录名/用户的内容
  • PUBLIC 角色(服务器或数据库)中的成员身份没有任何影响,因为权限与“已知良好”服务器上的权限相同。
  • 我宁愿不让用户对整个数据库拥有一揽子 SELECT 权限。
sql-server sql-server-2008-r2
  • 1 个回答
  • 6952 Views
Martin Hope
Steve Mangiameli
Asked: 2015-10-22 07:54:16 +0800 CST

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败

  • 4

我有一个运行 Windows Server 2012R2 和 SQL Server 2014 Enterprise 后端的操作服务器。此服务器用于通过 SQL 代理作业调用的 cmd 文件将新代码部署到其他生产服务器。所有服务器都在同一个域中。

服务器 A 运行 Windows Server 2008R2 和 SQL Server 2008R2 后端。此服务器有一个链接服务器连接到服务器 B 上的数据库,运行与 A 相同的操作系统和 SQL Server 版本。链接服务器配置有选项 @useself=TRUE。

  • 所有三台服务器都使用启用了委派的服务帐户。
  • 此服务帐户在所有三个 SQL Server 实例上都具有 sa 特权。
  • 所有三台服务器都使用该帐户配置了 SPN,并被委派将 Kerberos 用于关联的 MSSQLSVC 服务。

我可以在每个上运行以下命令并返回“Kerberos”

    SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid

此外,我可以毫无问题地从任何这些服务器远程登录、ping 等到任何其他服务器 - 一切都已连接。代码部署从未出现过问题,并且经常引用链接服务器并且没有问题......除了一种情况,我不明白为什么。

双跳场景

  1. 操作服务器上的 SQL 代理作业由除 SQL 代理服务帐户之外的任何系统管理员临时运行,并在操作服务器上执行 cmd 文件。
  2. SQL 代理作业被配置为“运行方式”一个 SQL 代理服务帐户,具有 sa 权限。
  3. 部署的代码来自操作服务器上的 .sql 文件。
  4. cmd 文件调用 SQLCMD 来针对服务器 A 执行 .sql 文件中的代码。
  5. .sql 文件中的代码引用链接服务器并失败并出现错误

    *消息 18456,级别 14,状态 1,服务器 ServerB,第 1 行用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。* .

该错误针对链接服务器 - 服务器 B。如果我使用 SQLCMD 从操作服务器对服务器 A 手动运行此代码,它运行正常。如果我以 SQL 代理服务帐户身份登录到一个框并运行 SQL 代理作业,它运行良好。只有当 SQL 代理作业由 SQL 代理服务帐户以外的其他人执行时,我才会收到错误消息。

我已经阅读了很多关于 Kerberos、双跳等的帖子、博客和 MSDN 文章,告诉我去做已经做过的事情。我错过了什么?

附加信息 我终于能够回到这个并找到一些附加信息。根据 Bogdan 的建议,我运行了 Process Explorer 并验证了第一跳的凭据是否如预期来自 SQL 代理服务帐户,并且正在使用 TCP。唉,这就是我能够从该工具中获得的所有有用信息。

我深入研究了 Window 的应用程序日志并四处寻找机器上不同实例的登录信息,发现甚至没有使用 Kerberos!相反,正在使用 NTLM。

所以这就是我要走的新路径——为什么要使用 NTLM 身份验证,当 Kerberos 设置好并且端口和实例存在正确的 FQDN SDN 时?我是否需要以某种方式在 cmd 文件或 SQLCMD 调用中指定身份验证类型?还是我有一些我没有考虑的错误配置?

谜底加深 SQLCMD 调用通过别名引用了“第一跳”服务器。我修改了对实际命名实例的 SQLCMD 服务器引用并重新运行了该作业。有效!我们还为我们的机器和 SQL 实例使用 cNames,所以我尝试使用它。它也奏效了!为了咧嘴笑和咯咯笑,我重新尝试了别名......它工作了???我去检查每个这些的 Windows 应用程序日志,它仍然将身份验证报告为 NTLM!

在这一点上,我完全感到困惑,不知道如何解释这种行为来修复我们环境的其余部分。

sql-server kerberos
  • 2 个回答
  • 7439 Views
Martin Hope
Steve Mangiameli
Asked: 2014-10-22 09:23:51 +0800 CST

即使在日志增长期间数据库也很高兴可用?

  • 3

我一直在创建一个流程来检查我们所有的数据库并分析日志结构、备份、收缩和适当调整大小,同时考虑操作要求和 VLF 大小/数量。我的代码工作得很好,但我今天在测试中遇到了一些我没想到的事情。

我有一个大小适中的数据库,其中包含 104GB 日志和大约 900 个 VLF。在低活动期间,我备份了日志并缩小到几乎没有。然后我开始以 8GB 的​​迭代将它恢复到原来的大小,使 VLF 保持在 512MB 左右。在重新增长期间(介于 48GB 和 56GB 之间),我对数据库的可用性感到好奇,并开始对不同的表运行随机 SELECTS。结果返回没有问题。然后我在数据库中创建了一个表并循环了一堆插入。

当日志继续增长并且表创建和插入没有问题或延迟地完成时,我感到很惊讶。我的印象是数据库会以某种方式被锁定,阻止 DDL 和 DML,直到再生完成。当然,考虑到日志的循环性质,我可以看出这是一个错误的假设。但是我无法以某种方式在网络上找到任何东西。

有人可以阐明或指出正在发生的事情的正确方向吗?谢谢!

sql-server transaction-log
  • 1 个回答
  • 117 Views

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