Azure SQL 数据库的设计不允许用户更改其密码。任何解决方法?

Mx.*_*olf 3 sql-server azure

我们从事实开始:

  • 登录名在master数据库中,
  • 用户位于用户数据库中。
  • Azure 不允许使用 USE 语句更改数据库。
  • SQL 要求用户在master数据库中才能执行 ALTER LOGIN 语句。

.

--USE master;
--**ERROR** USE statement is not supported to switch between databases. Use a new connection to connect to a different database.
--GO
ALTER LOGIN nonadmin WITH PASSWORD='new5as$word' OLD_PASSWORD='old5a$sword';
--**ERROR** User must be in the master database. 
GO
Run Code Online (Sandbox Code Playgroud)

可以将数据库迁移到包含模式,但这种方式会非常累人,因为遗留代码有很多这样的地方:

IF(OBJECT_ID('tempdb..#temp1') IS NOT NULL)
BEGIN
  DROP TABLE #temp1
END;

CREATE TABLE #temp1
(
  id int not null IDENTITY,
  CONSTRAINT PK_tt1 PRIMARY KEY(id)
)
Run Code Online (Sandbox Code Playgroud)

除了迁移到包含数据库模式之外,是否有合适的解决方法?

Pan*_*vos 7

您正在尝试更改包含用户的密码。包含的用户没有服务器登录名,因此您无法使用该ALTER LOGIN语句。

您需要使用ALTER USER

ALTER USER nonadmin WITH PASSWORD='new5as$word' OLD_PASSWORD='old5a$sword';
Run Code Online (Sandbox Code Playgroud)

服务器登录名是您登录到服务器的身份。在 SSMS 中,您将在服务器的安全节点中找到登录信息。然后,这些登录名被授予以用户身份访问特定数据库的权限。这些用户存储在master数据库中。