为什么我不能使用 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
密码的步骤:
- 我在管理员模式下打开了命令提示符 (cmd)。
- 我输入了
osql -S SRH\SQLEXPRESS -E
并按下回车键。
- 然后我得到 1> 提示。然后我输入
sp_password null,
'HseWork11', 'sa'
并按下 Enter 键。
- 然后我得到 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。
我有一台笔记本电脑,上面已经安装了 SQL Server Express。服务器名称为SRH\SQLEXPRESS,版本为10.0.2531.0。操作系统是Windows7.
我可以通过 Windows 身份验证连接到它。但是我想连接到它 sa
。因为我不知道 sa
的密码所以我想重置它。我决定使用 osql
.
这些是我更改 sa
密码的步骤:
- 我在管理员模式下打开了命令提示符 (cmd)。
- 我输入了
osql -S SRH\SQLEXPRESS -E
并按下回车键。 - 然后我得到 1> 提示。然后我输入
sp_password null, 'HseWork11', 'sa'
并按下 Enter 键。 - 然后我得到 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。