首页 > 解决方案 > 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.

如果我从连接字符串中删除数据库名称,则连接建立,但如果我在连接字符串中给出数据库名称,则连接失败。

标签: sql-serverspring-boot

解决方案


考虑到您声明连接有效,您省略了数据库名称(这意味着登录名将连接到其默认数据库或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};

当然,您可能需要为您的用户提供更具体的权限,但这应该会让您走上正确的道路。


推荐阅读