【问题标题】:Why I cannot change sa password using osql?为什么我不能使用 osql 更改 sa 密码?
【发布时间】:2017-07-22 15:16:15
【问题描述】:

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

我可以通过 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 键,但我收到此错误消息:

消息 15151,级别 16,状态 1,服务器 SRH\SQLEXPRESS,第 1 行不能 更改登录“sa”,因为它不存在或您没有 权限。

无赖。

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

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

【问题讨论】:

    标签: sql-server windows osql sa


    【解决方案1】:

    您是否尝试过使用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 Server(您说过可以,但不是作为 SA),运行此查询以查看谁可以访问可能是值得的SQL Server 作为管理员。也许您有一个被赋予该角色的内置帐户...

    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 
    ;
    

    这将为您提供具有 SysAdmin 角色的 SQL Server 和 Windows 用户。

    第一次编辑:

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

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

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

    【讨论】:

    • 我试过 ALTER LOGIN 使用 sqlcmd 如你所说,但我收到相同的错误消息。然后我运行了您的查询,它返回了 1 行:NamesaType_descSQL_LOGINis_disabled1。为什么 is_disabled1 而不是 0
    • 更新了我的答案。请尝试我添加的解决方案,如果它适合您,请告诉我。
    • 启用登录后,您应该可以使用之前的ALTER LOGIN命令重试更改密码。
    • 我尝试了ALTER LOGIN sa ENABLE 使用sqlcmd,但我得到了同样的错误信息。
    • 我建议您查看this article,看看那里列出的步骤是否可以帮助您。
    【解决方案2】:

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

    请参考 Wikihow

    注意:OSQL 已停用,请使用 SQLCMD。

    【讨论】:

    • 如何检查我的 windows 登录是否是 SQL Server 中的系统管理员?
    • @srh 你已经知道它不是,因为你运行了我建议的查询并且你的 Windows 帐户没有被列为系统管理员之一。
    • @3BK 哦,我明白了;该查询具有过滤器SysAdmin = 1 仅显示系统管理员登录
    • @srh,非系统管理员用户无法修改系统管理员账号密码。
    猜你喜欢
    • 2014-06-30
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多