Azure SQL数据库缺少属性等

Bri*_*anD 2 sql ssms sql-server-2016 azure-sql-database

我一直在到处搜索,但似乎没有人遇到我的问题。我最近创建了一个Azure SQL数据库,但对弄清楚错误18456的处理方式却一无所获。我很多次看到“只需右键单击数据库,然后转到属性和安全性”,但是没有安全感。实际上,右键单击时似乎没有很多东西。我几乎对这一切一无所知,所以我尝试了很多事情。有一次我以为我需要使用样本冒险作品。但这不是。因此,如果有人帮助我,我将不胜感激。

[SSMS版本:16.4.1]

[Azure SQL数据库:服务器版本12]

我在SSMS(SQL Server Management Studio)中的属性菜单的图片 http://prnt.sc/cpwe3c ]

我的右键图片 http://prnt.sc/cpwh7y ]

Sha*_*der 5

您的错误很常见,但是在本地解决方案或使用虚拟机(基础架构即服务,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>';
Run Code Online (Sandbox Code Playgroud)

此时,如果您尝试使用和连接到虚拟实例,则可以连接到虚拟实例,但不能连接到该虚拟实例上的任何数据库。您的错误消息将显示如下内容:

服务器主体“”无法在当前安全上下文下访问数据库“”。

您至少需要再采取一步,此用户才能连接到您的用户数据库。

现在,从相同的SSMS脚本窗口,将数据库更改为您授予访问权限的用户数据库()。这将是您希望您的实体框架应用程序使用的数据库。请记住,使用顶部的下拉菜单。

首先,我们将为上一步中创建的登录名创建一个数据库用户。

CREATE USER [<username>] FOR LOGIN <username>
Run Code Online (Sandbox Code Playgroud)

然后,我们将允许它连接到您的用户数据库,即您希望实体框架应用程序使用的数据库。

GRANT CONNECT TO [<username>]
Run Code Online (Sandbox Code Playgroud)

此时,您的新用户名可以登录到虚拟实例并连接到用户数据库。

现在,您将需要添加该用户所需的任何其他权限。例如,如果您仅需要读取权限,则可以避免将用户添加到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子句。