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 / 问题

问题[kerberos](dba)

Martin Hope
Sir Swears-a-lot
Asked: 2023-01-09 19:08:49 +0800 CST

新的 SQL 2022 服务器不会注册 SPN

  • 5

我刚刚构建了 2 个新的 Win/SQL 2022 服务器。一切顺利,我可以连接 SSMS。

然后我将两个 SQL 引擎服务更改为使用域帐户(我的标准做法),我可以在本地连接,但无法再通过 SSMS 远程连接并出现以下错误。

The target principal name is incorrect.  Cannot generate SSPI context. (Microsoft SQL Server, Error: 0)

当 SQL 作为本地服务运行时,它可以注册一个 SPN。但是当它作为域帐户运行时它不能。(我已经在两台服务器上重复了几次)。我还尝试使用域管理员帐户运行该服务。

我已经按照自动和手动设置 SPN的MS 说明进行操作。而且都没有解决问题。

还有其他人遇到过这个吗?任何意见或建议将不胜感激。

编辑:我已经尝试过 Kerberos Config Mgr 工具,但它无法远程或本地连接,它返回错误:

10/01/2023 11:36:10 am Error: Connect to SQLWMI failed \root\Microsoft\SqlServer\ComputerManagement System.Management.ManagementException: Invalid namespace

我也试过运行 SQL 修复。

启动后SQL日志显示如下警告:

SQL Server is attempting to register a Service Principal Name (SPN) for the SQL Server service. Kerberos authentication will not be possible until a SPN is registered for the SQL Server service. This is an informational message. No user action is required.

The SQL Server Network Interface library could not register the Service Principal Name (SPN) [ MSSQLSvc/server.domain ] for the SQL Server service. Windows return code: 0xffffffff, state: 53. Failure to register a SPN might cause integrated authentication to use NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies and if the SPN has not been manually registered.
kerberos
  • 1 个回答
  • 135 Views
Martin Hope
JulioQc
Asked: 2021-10-27 08:51:05 +0800 CST

PostgreSQL 用户映射在 AD 用户和 DB 用户之间不起作用

  • 0

我正在尝试在我的实验室 RHEL PSQL 13 和我的 AD 之间设置 kerberos 身份验证并取得一些成功,除非我尝试按照文档中的说明在 pg_ident.conf 中配置用户映射。

我的 psql 用户是user,我的 AD 用户是[email protected]. 后者用于用户连接,前者是用户在数据库中的定义方式。我需要剥离域以与 psql 用户正确匹配。

AD 用户已配置机器 SPN,并且已在 psql 配置中设置了 keytab。

pg_hba.conf文件:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             0.0.0.0/0               gss include_realm=1 krb_realm=DOMAIN.COM map=ad

pg_ident.conf文件:

# MAPNAME       SYSTEM-USERNAME         PG-USERNAME
ad              /^(.*)@DOMAIN\.COM$     \1
ad              /^(.*)@domain\.com$     \1

现在,当我尝试使用 kerberos auth with 进行连接时[email protected],例如在 pgAdmin4 中,它在 psql 日志中显示以下内容失败:

LOG:  no match in usermap "ad" for user "[email protected]" authenticated as "[email protected]"
FATAL:  GSSAPI authentication failed for user "[email protected]"
DETAIL:  Connection matched pg_hba.conf line 99: "host    all             all             0.0.0.0/0               gss include_realm=1 krb_realm=DOMAIN.COM map=ad"

如果我设置如下配置并在没有域的情况下pg_hba.conf使用连接user,我可以正常连接。

pg_hba.conf文件:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             0.0.0.0/0               gss include_realm=0 krb_realm=DOMAIN.COM

我在这里做错了什么?为什么用户不映射?我在运行 PSQL 13 的 RHEL8 上。

postgresql kerberos
  • 2 个回答
  • 410 Views
Martin Hope
JoeNahmias
Asked: 2021-07-23 09:28:19 +0800 CST

无法使用 kerberos 身份验证连接到 MSSQL

  • 1

我们有一个独立的 SQL 服务器 [Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)],我们想使用 kerberos 身份验证,以便通过链接服务器查询其他数据库。我们已将 MSSQL 实例设置为使用 AD 服务帐户运行,并为该帐户提供对实例用于连接加密的 SSL 证书的私钥的访问权限。

重新启动后,我在 ERRORLOG 中看到 MSSQL 能够注册适当的 SPN:

Server      The SQL Server Network Interface library successfully registered the Service Principal Name (SPN) [ MSSQLSvc/mssql-server.example.org ] for the SQL Server service.
Server      The SQL Server Network Interface library successfully registered the Service Principal Name (SPN) [ MSSQLSvc/mssql-server.example.org:1433 ] for the SQL Server service.

但是,当从与服务器加入同一域的远程 Windows 10 计算机连接时,使用 SSMS [v18.9.2] 中的 Windows 身份验证,然后检查auth_scheme我看到:

/*------------------------
SELECT net_transport, auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID;
------------------------*/
net_transport                            auth_scheme
---------------------------------------- ----------------------------------------
TCP                                      NTLM

(1 row affected)

查看我在网上找到的文档,我相信我已经完成了完成这项工作所需的一切。有什么我错过的想法吗?

sql-server kerberos
  • 1 个回答
  • 359 Views
Martin Hope
Adley F
Asked: 2021-06-27 23:13:18 +0800 CST

MongoDB 4.4 企业版和 Kerberos 身份验证

  • 0

我正在尝试设置 Kerberos 身份验证以与 MongoDB Enterprise 4.4 一起使用。
我的操作系统是 Centos 8。我已经按照https://docs.mongodb.com/manual/tutorial/install-mongodb-enterprise-on-red-hat/
中的描述配置了 SELinux 。

总结
总之,如果我按照 MongoDB 文档( https://docs.mongodb.com/manual/tutorial/control-access-to-mongodb-with-kerberos-authentication/)mongod显示的示例,启动服务没有问题:

env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab \
mongod --tls --port 29000 --dbpath /data/mongodb --setParameter authenticationMechanisms=GSSAPI

(我的实例已激活 TLS 并使用自定义端口运行)

但是一旦尝试使用 启动服务systemctl,它就是不想运行。

目标
我想要实现的是成功用于systemctl停止/启动mongod服务。

本质上,我/etc/mongod.conf的如下:

security:
  authorization: enabled
  ldap:
    servers: myldap.mydomain.com:636
    bind:
      queryUser: [email protected]
      queryPassword: somepassword
    transportSecurity: tls
setParameter:
  authenticationMechanisms: "PLAIN,SCRAM-SHA-256,MONGODB-X509"

设置
我有什么设置:

  1. 我正在使用 Active Directory (Windows Server 2019) 和 Centos 8。

  2. 我已经配置了 LDAP,因此它接受 TLS/SSL(还测试了使用另一台 Windows 机器上的 LDAPAdmin.exe 工具一切正常)。

  3. 运行kinit或klist来自 MongoDB 机器没有问题。

  4. 在此之前,我已经成功地将 LDAP 身份验证与 MongoDB 集成(使用simple绑定选项)。

  5. userToDNMapping作为使用 LDAP 集成的域用户之一(通过配置andauthz.queryTemplate参数),我对 MongoDB 实例进行身份验证没有问题。

  6. 自定义 MongoDB 端口:tcp/29000

  7. 自定义 MongoDB 数据路径:/data/mongodb

  8. CentOS 8 机器已经加入域(使用realm join)。

到目前为止的配置
现在,我尝试执行以下操作以使 Kerberos 正常工作:

  1. svc_mongodb在 AD 上创建了一个托管服务帐户 ( )。

  2. 创建SPN如下:

setspn -S mongodb/mongodb-svr.mydomain.com:[email protected] svc_mongodb
  1. 使用以下命令创建了 keytab 文件ktpass:
ktpass /out mongodb-svr.keytab /princ mongodb/mongodb-svr.mydomain.com:[email protected] /mapuser svc_mongod /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPAL /pass somepassword
  1. 将 keytab 放在/data/mongodb/mongodb-svr.keytab(在 CentOS 机器上)。也chown和chmod它给mongod用户和400。

  2. mongod使用命令行启动服务(可行):

env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab \
mongod --tls --port 29000 --dbpath /data/mongodb --setParameter authenticationMechanisms=GSSAPI

什么失败
了然而,当我改变/etc/mongod.conf这个:

setParameter:
  authenticationMechanisms: "GSSAPI,SCRAM-SHA-256,MONGODB-X509"

我收到了这个错误: Unspecified GSS failure. Minor code may provide more information; Minor code 13; Permission denied

查看审计日志,我注意到了这一点:

type=AVC msg=audit(1624773960.885:206): avc:  denied  { open } for  pid=2771 comm="mongod" path="/etc/krb5.keytab" dev="dm-0" ino=8388741 scontext=system_u:system_r:mongod_t:s0 tcontext=system_u:object_r:krb5_keytab_t:s0 tclass=file permissive=0

好的,这是意料之中的,因为我还没有配置 SELinux 文件上下文以便mongod可以打开它。但如果可能的话我不想这样做,因为我想改用特定的 keytab 文件。

我试过的

  1. 我试图通过在我的 Centos 8 上进行编辑来遵循https://docs.mongodb.com/manual/tutorial/control-access-to-mongodb-with-kerberos-authentication/#std-label-setting-krb5_ktname 。/etc/sysconfig/mongod

  2. 我尝试编辑systemctl服务文件 ( /usr/lib/systemd/system/mongod.service) 以添加以下行:(之后运行systemctl daemon-reload)。

ExecStartPre=/usr/bin/env KRB5_KTNAME=/data/mongodb/mongodb-svr.keytab
  1. .profile在 mongod 的主目录下创建一个并在KRB5_KTNAME那里导出变量。

  2. krb.sh在目录下创建一个/etc/profile.d并在那里导出KRB5_KTNAME变量。

到目前为止,以上都没有奏效。
所以我很困惑为什么(以及我该如何设置这个变量)。
我真的想避免不得不使用setfacl -m该/etc/krb5.keytab文件,或者必须创建额外的 SELinux 策略(应该可以通过 轻松完成audit2allow)。

如果有人能指出我的错误,那将有很大帮助。
谢谢!

mongodb kerberos
  • 1 个回答
  • 49 Views
Martin Hope
SomeGuy
Asked: 2018-12-27 13:54:34 +0800 CST

如何让 Kerberos 针对 Power BI 报表服务器中的命名 SQL Server 实例工作?

  • 0

我有一个 Power BI 报表服务器,可以完美地连接到仅具有默认实例的 SQL Server 计算机。我还可以连接到SSAS具有正确 SPN 的命名实例,并允许Kerberos constrained delegation从 Power BI 服务帐户连接到MSOLAPSVC.3 service(SQL Server 浏览器)。我相信我已经正确设置了所有正确的 SPN,因为我可以运行链接服务器并从任何东西查询任何东西。Kerberos 配置管理器为所有内容显示绿色复选标记。

我唯一的问题是连接到 SQL Server 引擎(不是 SSAS)的命名实例。我收到以下错误,如果 SPN 未正确注册,您通常会收到此错误。

描述:用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。原因:找不到与提供的名称匹配的登录名。[客户:xxxx]

从 Power BI(可能还有 SSRS)连接命名实例的方式是否有区别?我正在尝试在我的环境中的 .pbix 文件中针对 SQL Server 的远程命名实例执行 DirectQuery。

authentication kerberos
  • 1 个回答
  • 1361 Views
Martin Hope
paulH
Asked: 2018-11-20 04:46:37 +0800 CST

SQL Server - 注册服务主体名称而不重新启动服务?

  • 2

我有一个没有注册 SPN 的实时 SQL Server 2012 环境 - 这以前不是问题,因为不需要 Kerberos 身份验证。但现在它是必需的。

我已经正确配置了所有内容,但是在进行了这些更改之后,我想确保 SQL Server 可以成功注册 SPN——最好不要重新启动服务,因为这是一个实时环境。

有没有办法做到这一点?

PS 我知道我可以手动注册 SPN,但我想确保它们可以自动注册。

sql-server kerberos
  • 1 个回答
  • 3621 Views
Martin Hope
BradC
Asked: 2017-07-18 13:42:01 +0800 CST

对于每个 SQL 实例,我的 SPN 条目应该是什么样的?

  • 10

我发现关于如何准确格式化 SPN(服务主体名称)以获得正确的 Kerberos 连接以及每个 SQL 实例需要多少个相互矛盾的信息。

此 2017 MS 文档包含以下内容:

从 SQL Server 2008 开始,为了支持 TCP/IP、命名管道和共享内存上的 Kerberos 身份验证,更改了 SPN 格式。命名实例和默认实例支持的 SPN 格式如下。

  • 命名实例:MSSQLSvc/FQDN:[port|instancename]
  • 默认实例:MSSQLSvc/FQDN:port|MSSQLSvc/FQDN

新的 SPN 格式不需要端口号。这意味着多端口服务器或不使用端口号的协议可以使用 Kerberos 身份验证。

我认为最后一段的意思是我只需要一个条目,以下之一:

  • 命名实例:MSSQLSvc/sqlbox1.mydomain.org/instance2
  • 默认实例:MSSQLSvc/sqlbox1.mydomain.org

这似乎与这个较旧的 (2011) MS 文档相矛盾,不仅与端口号有关,还与使用什么名称有关:

要创建 SPN,您可以使用 SQL Server 的 NetBIOS 名称或完全限定域名 (FQDN)。但是,您必须为 NetBIOS 名称和 FQDN 创建一个 SPN。

当我查看环境中已经存在的 SPN 时,我看到了各种各样的组合,有些服务器最多有 4 个条目:

  • MSSQLSvc/sqlbox1
  • MSSQLSvc/sqlbox1:1433
  • MSSQLSvc/sqlbox1.mydomain.org
  • MSSQLSvc/sqlbox1.mydomain.org:1433

甚至MS 自己的 Kerberos 配置管理器似乎也想生成最后两个版本(带有适当的混淆):

在此处输入图像描述

同样,对于现有的命名实例,我看到了一个奇怪的组合,其中一些几乎可以肯定是无效的:

  • MSSQLSvc/sqlbox1:1522
  • MSSQLSvc/sqlbox1:instance2
  • MSSQLSvc/sqlbox1.mydomain.org:1522
  • MSSQLSvc/sqlbox1.mydomain.org:instance2
  • MSSQLSvc/sqlbox1.mydomain.org/instance2
  • MSSQLSvc/sqlbox1.mydomain.org:1522:instance2

那么,如果我只在我的环境中使用 TCP,那么对于默认实例和命名实例,我的 DSN 应该是什么样子呢?

我应该包括端口,还是不包括?还是包括一个带端口和一个不带?

仅使用 FQDN,还是只需要带有 Netbios 名称的条目?或者只有当我们使用命名管道(我们不是)时才会这样?

(对于上下文,我们运行 SQL 2005 到 2014,一些集群,另一些独立。连接仅通过 TCP,在配置管理器中禁用命名管道。我们将手动修复/创建这些,而不是允许 SQL 服务帐户创建它们服务器启动。)

sql-server kerberos
  • 2 个回答
  • 19401 Views
Martin Hope
James Jenkins
Asked: 2016-03-22 10:18:23 +0800 CST

什么是森林?

  • 5

我正在阅读 Microsoft 文章如何解决“无法生成 SSPI 上下文”错误消息

这两句话暗示如果我知道域是什么,我应该知道森林是什么,但我不知道。我用谷歌搜索了一下,发现的所有内容要么不相关(“只见树木不见森林”),要么没有解释该术语。

将 SPN 视为服务器资源中某个实例的域或林唯一标识符。

-

3.检查服务器所属的域和你连接的域帐号是否在同一个林中。这是 SSPI 工作所必需的。

sql-server kerberos
  • 1 个回答
  • 453 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

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