我到处都在搜索,但似乎没有人遇到我的问题。我最近创建了一个Azure SQL数据库,但对弄清错误18456的处理却一无所获。我很多次看到“只需右键单击数据库,然后转到属性和安全性”,但是有没有安全感。实际上,右键单击时似乎没有很多东西。我几乎对这一切一无所知,所以我尝试了很多事情。有一次我以为我需要使用样本冒险作品。但这不是。因此,如果有人帮助我,我将不胜感激。
[SSMS版本:16.4.1]
[Azure SQL数据库:服务器版本12]
SSMS(SQL Server Management Studio)中我的属性菜单的图片
]
我的右键图片
]
请您参考如下方法:
您的错误很常见,但是在本地解决方案或使用虚拟机(基础架构即服务,IaaS)解决错误的方式与解决Windows Azure SQL数据库(WASD)的方式不同。 WASD是SQL Server的平台即服务版本。 SQL实例是逻辑的,因此您必须更改一些思维过程。更改思维过程所需的主要方法之一是如何管理SQL数据库。
在WASD中创建数据库时,系统会要求您创建管理用户名和密码。使用该帐户,您可以部署数据库的架构以及SQL Authenticated Users和权限。您无权更改实例的身份验证类型,这就是为什么在右键单击实例名称并选择属性时看不到安全性选项的原因。
以下步骤是创建新的 LOGIN 的方法,以允许该新用户对虚拟实例进行身份验证。创建 LOGIN 后,您需要为此 LOGIN 创建一个数据库 USER 。有了这个 USER ,您就可以分配该 USER 可以做什么和不能做什么的权限。
为Windows Azure SQL数据库添加登录名
开始之前的一些注意事项。在以下代码中,尖括号(
<和>
)中的任何内容均表示您可以更改此变量。您要为实体框架应用程序创建的用户名也将如此。将是您要用于的密码。
使用您的管理凭据连接到您的实例。该帐户有权控制有关数据库的所有内容。连接时,您应该发现默认情况下已连接到该实例上的master数据库。如果不是,请使用SSMS顶部的下拉菜单更改为master。 “USE master”将不起作用。
通过此连接,以下T-SQL将创建您的实体框架的用户名和密码。
和>
CREATE LOGIN [<username>] WITH PASSWORD = '<password>';
此时,如果您尝试使用和连接到虚拟实例,则可以连接到虚拟实例,但不能连接到该虚拟实例上的任何数据库。您的错误消息将显示如下内容:
The server principal "" is not able to access the database "" under the current security context....
您至少需要再采取一步,此用户才能连接到您的用户数据库。
现在,从相同的SSMS脚本窗口,将数据库更改为您授予访问权限的用户数据库()。这将是您希望您的实体框架应用程序使用的数据库。请记住,使用顶部的下拉菜单。
首先,我们将为上一步中创建的登录名创建一个数据库用户。
CREATE USER [<username>] FOR LOGIN <username>
然后,我们将允许它连接到您的用户数据库,即您希望实体框架应用程序使用的数据库。
GRANT CONNECT TO [<username>]
此时,您的新用户名可以登录到虚拟实例并连接到用户数据库。
现在,您将需要添加该用户所需的任何其他权限。例如,如果您只需要读取权限,则可以避免将用户添加到db_datareader数据库角色。立即添加这些权限。
关于连接和连接字符串的特别说明
现在,您的用户已设置为连接到您的用户数据库。这意味着在SSMS中,如果您尝试与Entity-Framework用户连接,则连接对话框还有一个额外的步骤。在单击“连接”之前,必须先单击“选项”按钮。
由于您的用户无法点击master,因此您必须告诉SSMS您想先连接到用户数据库,而避免点击master。默认情况下,SSMS将首先尝试连接到SQL实例的master数据库。
您必须在“连接到数据库”条目中输入数据库的名称。输入数据库后,您可以点击连接。
我猜想在您的应用程序中,它已经为您的用户数据库设置了“Default Catalog =“值,您就可以连接了。在选项中设置此值就像设置“Default Catalog =“值。
我希望这可以帮助您更多地涉足WASD。
编辑:试图使IaaS SQL Server实例与PaaS Windows Azure SQL数据库之间的差异更加清晰。我以前错过了CREATE USER语句上的FOR LOGIN子句。