mic*_*amp 3 sql-server permissions connectivity connection-string
Microsoft ODBC Driver 17 for SQL Server
我正在尝试通过sqlcmd
设置-S
指向 的(服务器)选项来连接到服务器127.0.0.1,1434
。我已确认这是正确的端口。
我无法使用传统的.
, (local)
,localhost
选项。它必须通过其环回接口 IP 来寻址服务器127.0.0.1
(有关原因的其他上下文,请参阅帖子末尾)。
127.0.0.1
TLDR:为什么当登录名具有角色时我只能通过本地 IP 进行连接sysadmin
?
当我使用具有以下角色的登录名 ( local
)进行连接时sysadmin
:
sqlcmd -S 127.0.0.1,1434 -U local -P **** -d ****
1>
Run Code Online (Sandbox Code Playgroud)
不过,我正在尝试通过我创建的新登录进行连接,该登录具有更严格的访问权限。因此我不想给这个新登录角色赋予角色sysadmin
,而是使用默认public
角色。
当我尝试使用此登录以相同的方式连接时,我得到Login failed for user 'TestLogin'
sqlcmd -S 127.0.0.1,1434 -U TestLogin -P **** -d ****;
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'TestLogin '..
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么sysadmin
角色以某种方式允许“远程”(主机上的所有本地)访问,但如果没有这个角色,它就会失败。
根本原因是sysadmin
需要角色才能通过 进行连接127.0.0.1
。我找不到任何信息为什么会出现这种情况。
我的最终目标是能够使用 SQLALchemy/PyODBC 从容器化进程连接到服务器。在此配置中,我用于host.docker.internal
访问主机localhost
( 127.0.0.1
)。
我能够使用local
(带sysadmin
角色)登录从容器内部建立连接,没有问题。但是,当使用更受限制的登录时,它会失败。
所以我尝试通过从容器外部尝试并直接从主机上的 powershell 调用 sqlcmd 来隔离问题。正如您从最初的问题中看到的那样,我遇到了同样的问题,因此它与容器中的情况无关。
我提供了这个额外的上下文,因为在容器中我无法使用传统的.
, (local)
,localhost
选项。它必须通过其环回接口 IP 来寻址服务器,127.0.0.1
因为这是通过以下方式代理到容器的:host.docker.internal
TCP 1434 通常是专用管理连接的默认端口,需要 sysadmin。这就解释了为什么使用 sysadmin 角色成员时连接成功,但使用最低权限登录时连接失败。
如果您尚未执行此操作,请使用SQL Server 配置管理器启用 127.0.0.1 环回 IP 上的端口 1433 。然后,您应该能够在没有系统管理员角色成员身份的情况下进行连接。此外,由于 1433 是 SQL Server 默认端口,因此不需要显式端口规范。
归档时间: |
|
查看次数: |
4312 次 |
最近记录: |