sql-server - com.microsoft.sqlserver.jdbc.SQLServerException:无法打开数据库登录请求。登录失败
问题描述
我尝试通过 Spring Boot 应用程序访问 Sql Server。Sql management studio 一切正常,但是当我尝试连接 Spring boot 应用程序时,它会抛出错误:
com.microsoft.sqlserver.jdbc.SQLServerException:
Cannot open database <database> requested by the login. The login failed.
如果我从连接字符串中删除数据库名称,则连接建立,但如果我在连接字符串中给出数据库名称,则连接失败。
解决方案
考虑到您声明连接有效,您省略了数据库名称(这意味着登录名将连接到其默认数据库或master
)但在您指定数据库时没有这样做,这很可能意味着登录名没有用户在目标数据库中映射到它。首先,您需要在数据库中创建一个用户(您需要替换大括号 ( {}
) 中的文本:
USE {Target Database};
CREATE USER {Login Name} FOR LOGIN {Login Name};
您不需要使用登录名作为用户名(您可以拥有,相当愚蠢地拥有USER [Steve] FOR LOGIN [Jayne]
),但是,它们相同是很常见的,因为更明显的是哪些用户和登录名相互映射。
这将创建一个映射用户,但是,他们对该数据库没有任何权限。然而,让我们假设您的应用程序只需要对数据库、任何和所有对象的读取访问权限,仅此而已。然后将新的 suer 添加到db_datareader
角色中:
ALTER ROLE db_datareader ADD MEMBER {User Name};
当然,您可能需要为您的用户提供更具体的权限,但这应该会让您走上正确的道路。
推荐阅读
- javascript - 如果要从中减去一个数字,为什么必须在每条提示消息之后再次声明一个变量?JavaScript
- c++ - S() 与 S{} 之间的区别?
- python - 将(行)函数应用于 DataFrame 会更改列类型
- python - 如何更快地将更大的 .sql 文件执行到数据库?
- ruby - 从 Fastlane 启动文本编辑器?
- c# - .NET Core - 在哪里保存由多个 Repos/API 共享的模型?
- javascript - 有没有办法在 JS 中使用括号表示法调用存储为属性的函数?
- python - Selenium 自动化使用 Python 和 Selenium 在 An ul 中选择一个 li 菜单项
- javascript - 自定义 Swiper.js 进度条
- c# - 强制 Teamcity 忽略 .net 项目中的工具版本