我一直在寻找,但似乎没有人有我的问题。我最近创建了一个Azure SQL数据库,我根本没有运气,弄清楚如何处理错误18456.我很多次看到“只需右键单击数据库并转到属性和安全性”但是有没有安全感。事实上,当我右键单击时,似乎有很多我没有的东西。我几乎不知道任何关于这一点的事情,所以我尝试了很多东西。有一次我认为我需要使用冒险样本。但那不是它。如果有人帮忙,我会非常感激。
[SSMS版本:16.4.1]
[Azure SQL数据库:服务器版本12]
SSMS(SQL Server Management Studio)[http://prnt.sc/cpwe3c http://image.prntscr.com/image/88dcc70a540b470583d45b37024838b6.png]
中我的属性菜单的图片右键单击的图片 [http://prnt.sc/cpwh7y http://image.prntscr.com/image/230943a2f07e4b55aa7467cffe13c4f6.png]
答案 0 :(得分:4)
您的错误很常见,但您在内部部署或使用虚拟机(基础架构即服务,IaaS)解决此问题的方式与您为Windows Azure SQL数据库(WASD)解决问题的方式不同。 WASD是SQL Server的平台即服务版本。 SQL实例是合乎逻辑的,因此您必须更改一些思考过程。您需要改变思维过程的主要方法之一就是如何管理SQL数据库。
当您在WASD中创建数据库时,系统会要求您创建管理用户名和密码。使用该帐户,您可以部署数据库的架构以及SQL Authenticated Users和权限。您无权更改实例的身份验证类型,这就是当您右键单击实例名称并选择属性时,您没有看到安全选项的原因。 / p>
以下步骤是如何创建新的 LOGIN 以允许此新用户对虚拟实例进行身份验证。在您创建 LOGIN 之后,您需要为此 LOGIN 创建数据库 USER 。使用此 USER ,您可以为 USER 可以和不可以执行的操作分配权限。
在我们开始之前的几点说明。在下面的代码中,尖括号中的任何内容(<和>)表示这是您可以更改的变量。那么您要为Entity-Framework应用程序创建的用户名也是如此。将是您想要用于的密码。
使用您的管理凭据连接到您的实例。此帐户具有控制数据库所有内容的权限。连接时,您应该发现默认情况下您已连接到该实例上的master数据库。如果没有,请使用SSMS顶部的下拉菜单更改为master。 "使用大师"不行。
通过此连接,以下T-SQL将创建您的Entity-Framework的用户名和密码。
CREATE LOGIN [<username>] WITH PASSWORD = '<password>';
此时,如果您尝试使用此连接到虚拟实例,则可以连接到虚拟实例,但不能连接到此虚拟实例上的任何数据库。您的错误消息会说:
服务器主管&#34;&#34;无法访问数据库 &#34;&#34;在当前的安全背景下......
在此用户连接到您的用户数据库之前,您需要至少再执行一步。
现在,从同一个SSMS脚本窗口,将数据库更改为您授予访问权限的用户数据库()。这将是您希望Entity-Framework应用程序使用的数据库。请记住,使用顶部的下拉菜单。
首先,我们将为上一步中创建的登录创建数据库用户。
CREATE USER [<username>] FOR LOGIN <username>
然后,我们将允许它连接到您希望Entity-Framework应用程序使用的数据库用户数据库。
GRANT CONNECT TO [<username>]
此时,您的新用户名可以登录虚拟实例并连接到您的用户数据库。
现在,您需要添加此用户需要的任何其他权限。例如,如果您只需要读取权限,则可以将用户添加到db_datareader数据库角色。立即添加这些权限。
您的用户现已设置为连接到您的用户数据库。这意味着在SSMS中,如果您尝试连接Entity-Framework用户,则连接对话框还有一个额外的步骤。在单击“连接”之前,必须单击“选项”按钮。
由于您的用户无法访问主服务器,因此您必须首先告诉SSMS您要连接到用户数据库并避免命中主服务器。默认情况下,SSMS将首先尝试连接到SQL实例的主数据库。
您必须在&#34;连接到数据库&#34;中输入数据库的名称。条目。在您进入数据库后,您可以点击连接。
我猜你的应用程序已经有了#34;默认目录=&#34;值设置为您的用户数据库,您可以连接。在选项中设置此值就像设置&#34;默认目录=&#34;值。
我希望这可以帮助你更多地进入WASD。
编辑:尝试增加IaaS SQL Server实例与PaaS Windows Azure SQL数据库之间差异的清晰度。我以前错过了CREATE USER语句中的FOR LOGIN子句。