我尝试通过Spring启动应用程序访问Sql Server。一切都可以在Sql Management Studio上正常工作,但是当我尝试与Spring Boot应用程序连接时,会抛出错误:
com.microsoft.sqlserver.jdbc.SQLServerException:
Cannot open database <database> requested by the login. The login failed.
如果我从连接字符串中删除数据库名称,则建立连接,但是如果我在连接字符串中指定数据库名称,则会失败。
答案 0 :(得分:0)
考虑到您声明连接有效,因此省略了数据库名称(这意味着“登录名”将连接到其默认数据库或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};
当然,您可能需要为您的用户授予更多特定权限,但这应该使您走上正确的道路。