SQL Server新建用户登录失败:仅授权视图和存储过程的用户无法登录
解决SQL Server登录失败:Login failed for user 'Interface_Admin'
刚踩过这个坑,咱们从最常见的原因一步步排查,大概率能解决:
1. 先确认「服务器级登录(Login)」是否存在
你提供的代码只提到了数据库用户(User),但SQL Server的权限体系是服务器登录→数据库用户两层映射的——如果只创建了数据库用户,没有对应的服务器登录,肯定登不上。
正确的创建流程应该是先在master库创建服务器登录,再到目标库创建映射的数据库用户:
-- 第一步:创建服务器级登录(必须在master库执行) USE [master] GO IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'Interface_Admin') CREATE LOGIN [Interface_Admin] WITH PASSWORD=N'letmein01', -- 注意密码要和连接字符串一致 DEFAULT_DATABASE=[TESTDB], -- 默认登录到TESTDB CHECK_EXPIRATION=OFF, -- 按需开启密码过期 CHECK_POLICY=OFF; -- 按需开启密码复杂度策略 GO -- 第二步:创建数据库用户并映射到服务器登录 USE [TESTDB] GO IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'Interface_Admin') CREATE USER [Interface_Admin] FOR LOGIN [Interface_Admin]; GO
2. 检查SQL Server的身份验证模式
默认情况下SQL Server可能只开启了Windows身份验证,这时候SQL账号肯定登不上:
- 打开SSMS,右键你的服务器(SQL02)→ 属性 → 安全性
- 确认选中「SQL Server和Windows身份验证模式」
- 重启SQL Server服务生效
3. 排查登录状态与权限
- 打开SSMS→安全性→登录名→找到Interface_Admin,右键→属性→状态
- 确认「登录」选项是启用状态,没有被禁用
- 检查服务器层面有没有拒绝登录的权限(比如有没有给该登录分配
DENY CONNECT SQL权限)
4. 验证连接字符串的细节
你的连接字符串里Integrated Security=False和Trusted_Connection=False是重复的,保留一个就行,不过不影响登录,但要注意其他细节:
- 服务器名
SQL02是否正确?如果是命名实例,要写成SQL02\InstanceName;如果是远程服务器,要确认网络能通、防火墙开放了SQL端口(默认1433) - 密码
letmein01是否和创建登录时设置的完全一致(大小写敏感?取决于SQL Server的设置)
5. 权限授予的补充(确保用户能访问目标对象)
如果登录成功后还要确保能访问视图和存储过程,建议用角色来管理权限更清晰:
USE [TESTDB] GO -- 创建一个自定义角色 IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceAccessRole') CREATE ROLE [InterfaceAccessRole]; GO -- 给角色授予需要的权限(替换成你的视图、存储过程名) GRANT SELECT ON [dbo].[YourTargetView] TO [InterfaceAccessRole]; GRANT EXECUTE ON [dbo].[YourTargetProc] TO [InterfaceAccessRole]; GO -- 把用户加入角色 ALTER ROLE [InterfaceAccessRole] ADD MEMBER [Interface_Admin]; GO
快速测试方法
先用SSMS直接用Interface_Admin账号登录SQL02服务器:
- 如果SSMS也登不上:说明是用户创建/身份验证模式的问题,回到前面的步骤排查
- 如果SSMS能登,但应用连接字符串不行:大概率是连接字符串的服务器名、端口或者拼写错误
内容的提问来源于stack exchange,提问作者ryansin
相关产品推荐
相关产品推荐

