为啥SQL数据库不能用SQL Server身份登录 提示用户sa登录失败。(Microsoft SQL server,错误18456)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥SQL数据库不能用SQL Server身份登录 提示用户sa登录失败。(Microsoft SQL server,错误18456)相关的知识,希望对你有一定的参考价值。

SQL 是2008的

1、用windows身份登录。

2、右键-->属性,选择【安全性】,选择身份验证方式。

3、选择【安全性】-->【登录名】-->【sa】。

4、双击【sa】,出现视图,点击【常规】,设置新的密码。

5、选择【状态】,修改为如下设置。

6、重新打开身份验证界面,选择【SQL Server 身份验证】,填入相应的用户名和密码即可。

参考技术A

解决办法。如下参考:

1.以windows身份登录。

2.右键单击属性,选择安全性,然后选择身份验证方法。

3.选择安全>登录>SA。

4.双击SA打开视图,然后单击general设置新密码。

5.选择【状态】,修改为如下设置。

6.再次打开身份验证界面,选择SQLserver身份验证,并填写相应的用户名和密码。

参考技术B 这个是好东西,收集纪念了!

一.控制面板-》服务-》MS SQL SERVER-》登陆--》本地系统帐户--》重新启动MS SQL SERVER
用windows验证登陆查询分析器--》执行 sp_password null,sa新密码,'sa'

二."无法连接到服务器,用户xxx登陆失败"
该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式,
因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法如下所示:
1.在服务器端使用企业管理器,并且选择"使用 Windows 身份验证"连接上 SQL Server
操作步骤:
在企业管理器中
--右键你的服务器实例(就是那个有绿色图标的)
--编辑SQL Server注册属性
--选择"使用windows身份验证"
--选择"使用SQL Server身份验证"
--登录名输入:sa,密码输入sa的密码
--确定
2.设置允许SQL Server身份登录
操作步骤:
在企业管理器中
--展开"SQL Server组",鼠标右键点击SQL Server服务器的名称
--选择"属性"
--再选择"安全性"选项卡
--在"身份验证"下,选择"SQL Server和 Windows ".
--确定,并重新启动SQL Server服务.
在以上解决方法中,如果在第 1 步中使用"使用 Windows 身份验证"连接 SQL Server 失败,
那就通过修改注册表来解决此问题:
1.点击"开始"-"运行",输入regedit,回车进入注册表编辑器
2.依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名称"LoginMode",双击编辑双字节值
4.将原值从1改为2,点击"确定"
5.关闭注册表编辑器
6.重新启动SQL Server服务.
此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,
但是仍然无法使用Windows身份验证模式来连接SQL Server.
这是因为在 SQL Server 中有两个缺省的登录帐户:
BUILTIN\Administrators
<机器名>\Administrator 被删除.
要恢复这两个帐户,可以使用以下的方法:
1.打开企业管理器,展开服务器组,然后展开服务器
2.展开"安全性",右击"登录",然后单击"新建登录"
3.在"名称"框中,输入 BUILTIN\Administrators
4.在"服务器角色"选项卡中,选择"System Administrators"
5.点击"确定"退出
6.使用同样方法添加 <机器名>\Administrator 登录.
说明:
以下注册表键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值决定了SQL Server将采取何种身份验证模式.
1.表示使用"Windows 身份验证"模式
2.表示使用混合模式(Windows 身份验证和 SQL Server 身份验证).
追问

没看到 LoginMode 的单词呀
在屏幕右方只有一个默认的文件类型是REG_SZ
求解!

本回答被提问者采纳
参考技术C 第一,数据库连接地址是否正确;第二,密码是否正确;第三,你到底有没有sa用户追问

有啊!都正确?不知道为什么还是不行?可以有windows身份登录 就是不能有SQL Server身份登录

追答

这样,你先用windows登录,然后找到用户sa,然后就不管怎么样,先改了sa用户的密码,就是你想要登录的密码,然后再重新登录一次,还是不行的话,就得看你的连接的IP地址是不是对的了

追问

还是不行! 还是报错。(Microsoft SQL server,错误18456) 我的IP也没错呀

追答

没辙了,等高手吧

参考技术D 用windows身份登录,安全性-登录名-右键sa-属性-输入密码-并且勾选强制实施密码策略(只选择这一个,下面俩个不要勾选)
重启SQL2008,在连接

为啥我使用 Windows 身份验证通过 AzureML dataprep 登录 MS SQL 失败?

【中文标题】为啥我使用 Windows 身份验证通过 AzureML dataprep 登录 MS SQL 失败?【英文标题】:Why does my login to MS SQL with AzureML dataprep using Windows authentication fail?为什么我使用 Windows 身份验证通过 AzureML dataprep 登录 MS SQL 失败? 【发布时间】:2019-07-03 06:15:42 【问题描述】:

我尝试在 Azure Notebook 中使用azureml.dataprep 连接到 MS SQL 数据库,如https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-load-data#load-sql-data 中所述,使用MSSqlDataSource,使用表单代码

import azureml.dataprep as dprep

secret = dprep.register_secret(value="[SECRET-PASSWORD]", id="[SECRET-ID]")

ds = dprep.MSSQLDataSource(server_name="[SERVER-NAME]",
                       database_name="[DATABASE-NAME], [PORT]",
                       user_name="[DATABASE-USERNAME]",
                       password=secret)

设置[DATABASE-USERNAME] 等于MYWINDOWSDOMAIN\\MYWINDOWSUSERNAME 并且密码[SECRET-PASSWORD] 与我的Windows 密码一致(即尝试使用Windows 身份验证)。

使用

触发查询后
dataflow = dprep.read_sql(ds, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)

我明白了

ExecutionError: 登录失败。

我可以在没有 Windows 身份验证的情况下连接到其他数据库。我做错了什么?

【问题讨论】:

您是否尝试过使用其他数据库工具访问数据库?喜欢datagrip 嗨!想坚持dataprep(我可以使用 ODBC 驱动程序访问数据库)但想在这里使用 AzureML 工具。 您是否检查了 Azure 中 SQL 数据库的防火墙设置? 应该没问题 (?) [SERVER-NAME]。 【参考方案1】:

考虑使用SQL server authentication 作为连接到该数据库的解决方法/替代解决方案(同样的dataflow 语法将起作用):

import azureml.dataprep as dprep
secret = dprep.register_secret(value="[SECRET-PASSWORD]", id="[SECRET-ID]")

ds = dprep.MSSQLDataSource(server_name="[SERVER-NAME],[PORT]",
               database_name="[DATABASE-NAME]",
               user_name="[DATABASE-USERNAME]",
               password=secret)

注意dataprep 的用法已被弃用,sqlalchemy 可以替代使用

import pandas as pd
from sqlalchemy import create_engine

def mssql_engine(user = "[DATABASE-USERNAME]", 
                 password = "[SECRET-PASSWORD]", 
                 host = "[SERVER-NAME],[PORT]",
                 db = "[DATABASE-NAME]"):
    engine = create_engine(f'mssql+pyodbc://user:password@host/db?driver=SQL+Server')
    return engine

query = "SELECT ..."

df = pd.read_sql(query, mssql_engine())

【讨论】:

【参考方案2】:

Here is the MS Doc on MSSQLDataSourceMSSQLDataSource 实例有一个属性 credentials_type,默认为 SERVER。在进行查询之前,请尝试将其显式设置为 WINDOWS。此外,端口应与服务器名称一起指定。

import azureml.dataprep as dprep

windows_domain = 'localhost'
windows_user = 'my_user'
windows_password = 'my_password'

secret = dprep.register_secret(value=windows_password, id="password")

ds = dprep.MSSQLDataSource(server_name="localhost",
                   database_name="myDb",
                   user_name=f'windows_domain\windows_user',
                   password=secret)

ds.credentials_type = dprep.DatabaseAuthType.WINDOWS

dataflow = dprep.read_sql(ds, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)

【讨论】:

哦,谢谢,但是ExecutionError: Could not connect to specified database. 仍然失败了最后我放弃了(请参阅我自己的回答,了解我是如何“解决”这个问题的) @DavideFiocco 我稍微修改了上面的答案。我可以成功地使用它在我的本地 PC 上进行 Windows 身份验证/查询 sql express 数据库。我没有要处理的完整域,但本地 Windows 身份验证按预期工作。 实际上经过进一步测试,似乎指定的Windows凭据与服务器身份验证无关。如果没有提供 Windows 凭据,则查询失败,但提供无效凭据没有任何区别 - 身份验证使用运行 python 进程的 Windows 用户。我不确定这在 linux 上是如何工作的 - 似乎对 Windows 身份验证的支持非常有限。

以上是关于为啥SQL数据库不能用SQL Server身份登录 提示用户sa登录失败。(Microsoft SQL server,错误18456)的主要内容,如果未能解决你的问题,请参考以下文章

为啥sql server身份验证失败

sql server不能用windows身份登录

看看如何解决“SQL Server只能使用Windows身份登录,不能使用sa等Sql server身份进行登录”的问题

SQL server2000 windows身份验证失败怎么办

SQL server2000 windows身份验证失败怎么办

上次登录sql server 2008后,不小心把里面windows身份验证的 账号删除了, 以后都无法用windows身份验证进