为什么我不能使用 osql 更改 sa 密码?

Why I cannot change sa password using osql?

我有一台笔记本电脑,上面已经安装了 SQL Server Express。服务器名称为SRH\SQLEXPRESS,版本为10.0.2531.0。操作系统是Windows7.

我可以通过 Windows 身份验证连接到它。但是我想连接到它 sa。因为我不知道 sa 的密码所以我想重置它。我决定使用 osql.

来更改它

这些是我更改 sa 密码的步骤:

  1. 我在管理员模式下打开了命令提示符 (cmd)。
  2. 我输入了 osql -S SRH\SQLEXPRESS -E 并按下回车键。
  3. 然后我得到 1> 提示。然后我输入 sp_password null, 'HseWork11', 'sa' 并按下 Enter 键。
  4. 然后我得到 2> 提示。然后我输入 GO 并按 Enter 键,但我收到此错误消息:

Msg 15151, Level 16, State 1, Server SRH\SQLEXPRESS, Line 1 Cannot alter the login 'sa', because it does not exist or you do not have permission.

无赖。

为了确认登录 sa 存在,我通过 Windows 身份验证和 运行 此语句 select * from sys.syslogins where name = 'sa' 进行连接。我返回 1 行,所以登录 sa 存在。

那么为什么我不能使用 osql 更改 sa 密码?我做错了什么?

您是否尝试过使用 ALTER LOGIN 而不是 sp_password,也许还有 UNLOCK 选项?我使用 sqlcmd 而不是 osql - 我实际上不知道这是否有所作为。

在命令提示符中:

sqlcmd -S .\SQLEXPRESS
>1 ALTER LOGIN sa WITH PASSWORD = ‘whateveryouwant’ UNLOCK
>2 GO
>3 exit

这些显然是不同的命令,我知道有时 ALTER LOGIN 对我有用,而 sp_password 却没有。我不认为这是包治百病的方法,但可能值得一看。

旁注:

如果这不起作用,但你仍然可以连接到 SQL 服务器(你说你可以,只是不是作为 SA),可能值得 运行 这个查询看看谁 可以 以管理员身份访问 SQL 服务器。也许您有一个被赋予该角色的内置帐户...

USE Master
GO

SELECT
      P.Name
     ,P.Type_desc
     ,P.is_disabled
FROM sys.server_principals P
INNER JOIN sys.syslogins L
    ON L.SID = P.SID
WHERE P.Name NOT LIKE '#%'
AND L.SysAdmin = 1 
;

这将为您提供 SQL 服务器和 Windows 具有系统管理员角色的用户。

第一次编辑:

您说在 运行 执行此查询后 SA 帐户的 is_disabled 被标记为 1

返回命令提示符并尝试以下操作:

>1 ALTER LOGIN sa ENABLE
>2 GO
>3 exit

您可能不是使用 windows 登录名的 SQL 服务器实例中的系统管理员。如果你有系统管理员权限,应该可以修改sa登录的密码。

请参考 Wikihow

注意:OSQL是一个停止的功能,请使用SQLCMD。