Seb*_*Seb 5 sql-server logins sql-server-2017
我已经设置了一个新的数据库,我可以通过 SQL Server Management Studio 连接到该数据库并像平常一样执行操作。我创建了两个帐户供我的应用程序使用,并且都可以通过 SSMS 登录。我的程序正在运行 java 并使用“mssql-jdbc-6.4.0.jre8.jar”驱动程序,当我尝试连接时,我可以在数据库日志中看到以下错误:
错误:18456,严重性:14,状态:149 用户“application_read_only_user”登录失败。原因:基于登录的服务器访问验证因基础结构错误而失败。登录缺少连接端点权限。[客户端:127.0.0.1]
我查看了多个来源试图解决这个问题。微软官方文档似乎没有列出状态 149,我在网上找到的任何结果也没有列出。
我没有修改原始设置的端点,所以我只有以下项目:
我尝试将 SQL Server 服务设置为作为本地系统运行。
该网站上有很多类似的问题和堆栈溢出,但没有一个能够提供帮助。它们要么具有不同的状态,要么不列出状态。
如果您搜索错误18456,您最终会找到 Aaron Bertrand 的以下博客文章:
其中列出了以下内容states 146...149:
这些状态替换上面的状态 11 和 12,但仅限于 SQL Server 2016 或更高版本。目标是让系统管理员更轻松地诊断 SQL 身份验证和 Windows 身份验证登录之间以及连接和端点权限之间的实际根本问题(所有这些都无需向尝试登录的用户提供任何进一步的信息)。更多详细信息,请参阅本文的后半部分。
上述引用中的这篇文章链接引用了文章“为什么我会因登录失败而收到基础设施错误?” 在CSS SQL Server 工程师博客/网站上。
文章引用了这两个可能的原因作为“基于登录的服务器访问验证因基础设施错误而失败”的原因:
该登录名是否具有此服务器实例的名为 CONNECT SQL 的 SERVER 类权限?
对于客户端应用程序在其上建立连接的特定端点,登录名是否具有名为 CONNECT 的 ENDPOINT 类权限?
由于 SQL Server 2016+ 对于级别 146...149错误有新的错误消息,因此您会看到特定的错误消息登录缺少连接端点权限。(第 149 级),这将引导您进入上面的第二个选项。
使用以下脚本查看您当前的 enpoint 权限:
SELECT * FROM sys.server_permissions AS sp2
JOIN sys.server_principals AS sp
ON sp2.grantee_principal_id = sp.principal_id
LEFT OUTER JOIN sys.endpoints AS e
on sp2.major_id = e.endpoint_id
WHERE sp2.permission_name = 'CONNECT'
AND sp2.class_desc = 'ENDPOINT'
Run Code Online (Sandbox Code Playgroud)
GRANT您应该至少有一个条目用于,public和的组合TSQL Default TCP
检查用于 TCP 的 SQL Server 登录的 ENDPOINT 上的 CONNECT 权限,或者仅向该帐户授予权限:
GRANT CONNECT ON ENDPOINT::[TSQL Default TCP] TO public;
Run Code Online (Sandbox Code Playgroud)
(如果您只想将该权限分配给特定帐户,请替换public为 your )<SQL Server Login>
要查看端点列表,请运行:
select * from sys.endpoints
Run Code Online (Sandbox Code Playgroud)
我最终设法解决了这个问题。默认情况下,安装后,TCP/IP 连接已被禁用。我需要打开“SQL Server 配置管理器”,转到网络配置部分并启用 TCP/IP。
在 TCP/IP 上的“IP 地址”菜单下,我还需要确保 IP4 选项处于活动状态,并且 IPAll 端口与我期望服务器侦听的端口相匹配。
hot2use 的答案有很多可能有用的选项来解决问题,但最终没有一个能够诊断出我的确切问题。查询服务器本身返回的所有结果都表明一切正常,直到我查看这个工具才发现某些设置与我预期的不符。
| 归档时间: |
|
| 查看次数: |
12495 次 |
| 最近记录: |