【问题标题】:Azure SQL Database Lacking Properties etcAzure SQL 数据库缺少属性等
【发布时间】:2016-10-04 22:10:23
【问题描述】:

我一直在到处寻找,但似乎没有人遇到我的问题。我最近创建了一个 Azure SQL 数据库,但我完全没有运气弄清楚如何处理错误 18456。我很多次都看到“只需右键单击数据库并转到属性和安全性”,但有没有安全感。事实上,当我右键单击时,似乎有很多我没有的东西。不过我对此几乎一无所知,所以我尝试了很多东西。在某一时刻,我认为我需要使用示例冒险作品。但事实并非如此。因此,如果有人提供帮助,我将不胜感激。

[SSMS 版本:16.4.1]

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

SSMS(SQL Server Management Studio)中我的属性菜单的图片 ]

我的右键图片 ]

【问题讨论】:

  • 那么你到底想完成什么——你什么时候收到这个错误?我认为这是一个身份验证错误。这对创建用户有帮助吗:stackoverflow.com/questions/19094970/…
  • @sgeddes 嗯,我正在从这门课程中学习实体框架,当我尝试连接时,它只是说用户“”的登录失败{我正在尝试更新数据库}我尝试在相同的凭据下创建一个新用户,但是当我遇到这样的问题时,我得到了这个prntscr.com/cpwqnc,它必须处理连接字符串,但我真的不知道如何使用这些,我尽我所能理解它,但即便如此,我仍然缺少很多其他人似乎拥有的功能。
  • 所以我能够通过从我的 VS 服务器资源管理器复制粘贴连接字符串并编辑密码来解决用户登录失败的问题(我真的不太了解连接字符串,但那是'不是主要问题)......所以我正在做一个代码优先工作流的例子,所以当我创建一个新数据库时,它首先说超时,但它是在那之后不久创建的,但我添加的任何新数据库都没有显示SSMS 中的对象资源管理器,我一直在刷新但没有运气。
  • 您不会在右键单击数据库时看到安全选项卡'
  • 查看下面的完整说明,但要记住 Windows Azure SQL 数据库中的用户帐户的范围是用户数据库,而不是整个服务器。想想看,有多少叫 Danny 的人可能和你在同一个虚拟主机上?

标签: sql azure-sql-database ssms sql-server-2016


【解决方案1】:

您的错误很常见,但是您在本地或使用虚拟机(基础架构即服务、IaaS)解决它的方式与您为 Windows Azure SQL 数据库 (WASD) 解决它的方式不同。 WASD 是 SQL Server 的平台即服务版本。 SQL 实例是合乎逻辑的,因此您必须更改一些思维过程。改变思维过程的主要方法之一是管理 SQL 数据库的方式。

当您在 WASD 中创建数据库时,系统会要求您创建管理用户名和密码。使用该帐户,您可以部署数据库的架构以及经过 SQL 身份验证的用户和权限。您无权更改实例的身份验证类型,这就是您在右键单击实例名称并选择属性时看不到安全选项的原因。

以下步骤是您将如何创建一个新的 LOGIN 以允许该新用户对虚拟实例进行身份验证。创建LOGIN 后,您需要为此LOGIN 创建一个数据库USER。有了这个 USER,您就可以为这个 USER 可以做什么和不能做什么分配权限。

为您的 Windows Azure SQL 数据库添加登录名

在我们开始之前有几点注意事项。在下面的代码中,尖括号()中的任何内容都表示这是一个可以更改的变量。您要为 Entity-Framework 应用程序创建的用户名也是如此。将是您要用于您的密码。

使用您的管理凭据连接到您的实例。此帐户有权控制有关您的数据库的所有内容。连接时,您应该会发现默认情况下您已连接到该实例上的主数据库。如果没有,请使用 SSMS 顶部的下拉菜单更改为 master。 “使用大师”将不起作用。

通过此连接,以下 T-SQL 将创建您的 Entity-Framework 的用户名和密码。

CREATE LOGIN [<username>] WITH PASSWORD = '<password>';

此时,如果您尝试使用 this 和 连接到虚拟实例,您可以连接到您的虚拟实例,但不能连接到该虚拟实例上的任何数据库。您的错误消息会这样说:

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

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

现在,在同一个 SSMS 脚本窗口中,将数据库更改为您授予访问权限的用户数据库 ()。这将是您希望 Entity-Framework 应用程序使用的数据库。请记住,使用顶部的下拉菜单。

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

CREATE USER [<username>] FOR LOGIN <username>

然后,我们将允许它连接到您的用户数据库,即您希望 Entity-Framework 应用程序使用的数据库。

GRANT CONNECT TO [<username>]

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

现在,您需要添加该用户需要的任何其他权限。例如,如果您只需要读取权限,则可以将用户添加到 db_datareader 数据库角色中。立即添加这些权限。

关于连接和连接字符串的特别说明

您的用户现在已设置为连接到您的用户数据库。这意味着在 SSMS 中,如果您尝试与您的 Entity-Framework 用户连接,您的连接对话框中会有一个额外的步骤。在点击连接之前,您必须点击选项按钮。

由于您的用户无法访问 master,因此您必须告诉 SSMS 您要先连接到用户数据库并避免访问 master。默认情况下,SSMS 将首先尝试连接到您的 SQL 实例的主数据库。

您必须在“连接到数据库”条目中输入数据库的名称。进入数据库后,就可以点击连接了。

我猜想在您的应用程序中它已经为您的用户数据库设置了“默认目录=”值,并且您能够连接。在选项中设置此值就像设置“默认目录 =”值。

我希望这可以帮助你更多地进入 WASD。

编辑:试图澄清 IaaS SQL Server 实例和 PaaS Windows Azure SQL 数据库之间的差异。我之前错过了 CREATE USER 语句中的 FOR LOGIN 子句。

【讨论】:

  • 很抱歉回复晚了,但我认为这不是很具体?起初你告诉我创建一个登录,我做(我不一定知道目的)然后你说去实际的数据库,当我这样做时我尝试创建一个用户?但是然后我授予连接到什么?同一个用户名?登录名?我不明白,我都试过了,它说我没有权限或者它不存在。我不确定我要在授权连接中添加什么。 :
  • 进一步回复我最终创建了一个用户,嗯,不知何故,通过使用称为包含用户的东西?我做了这样的事情 Create user user_name with password = 'Password' ALTER ROLE [db_owner] ADD MEMBER [ContainedUser] 我也这样做了:ALTER AUTHORIZATION ON SCHEMA::[db_owner] TO [ContainedUser] 仍然没有做任何事情:
  • 我试图为您提供为新用户设置安全性的所有步骤。第一步,您要为新用户设置登录名。此步骤将允许您的新用户登录到实例。第二步为登录提供一个可以与您的用户数据库交互的数据库用户。让我在答案中添加更多细节,看看我是否可以更好地解释。
  • 这些步骤可以替代您希望看到的安全屏幕。
  • [ContainedUser] 是您尝试为实体框架应用程序创建和使用的 吗?如果是这样,请不要使用上面列出的两个 ALTER 语句,只需将用户添加到角色:sp_addrolemember 'db_owner', 'ContainedUser';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多