前言
对于SQL Server,我们通常采用密码进行身份验证。然而,某些情况下,我们需要实现无密登录,本文将介绍如何瞬间实现MSSQL的无密登录。
什么是无密登录?
无密登录是指用户无需在登录时输入密码即可进入数据库系统。这种方式常见于测试环境、开发环境以及某些特殊的应用场景。
常规实现无密登录的方式
在服务端配置
常规的方式是在服务端配置Sql Server实例以接受无密凭据登录。在SQL Server Management Studio中的“安全性”下找到“登录名”,选择“sa”登录名,右键单击选择属性(或按下F4键),勾选“以无密码方式启用登录”:
USE [master]
GO
ALTER LOGIN [sa] WITH DEFAULT_DATABASE=[master]
GO
ALTER LOGIN [sa] WITH PASSWORD=N'', CHECK_POLICY=OFF
GO
ALTER LOGIN [sa] ENABLE
GO
注意:该方式存在一定的安全隐患,因为它将信任委托给了服务器。同时,在常规配置的情况下,任何人都可以编写代码来连接到服务器并获得未经验证的系统管理员访问权限。
通过证书实现无密登录
为了缓解在无密码登录时带来的安全隐患,可以通过证书来进行身份验证。这个技巧需要建立一个证书以及一个基于证书的登录来实现无密码登录。下面是具体步骤:
创建证书:使用CREATE CERTIFICATE语句创建证书。
CREATE CERTIFICATE SansQL
FROM FILE = 'C:\SanSQL.cer'
WITH PRIVATE KEY
(
FILE = 'C:\SanSQL.pvk',
DECRYPTION BY PASSWORD = 'password'
);
创建基于证书的登录:使用CREATE LOGIN语句创建基于证书的登录。
CREATE LOGIN UncerifiedUser
WITH PASSWORD = 'password',
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF,
DEFAULT_DATABASE = AdventureWorks2012;
使用证书进行连接:使用ALTER LOGIN语句将证书与登录名关联,在连接数据库时,使用该登录名进行验证即可。
ALTER LOGIN UncerifiedUser
WITH PASSWORD = 'password',
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF,
DEFAULT_DATABASE = AdventureWorks2012;
GO
GRANT CONNECT SQL TO UncerifiedUser ;
GO
USE AdventureWorks2012;
GO
CREATE USER CertUser WITHOUT Login;
GO
CREATE CERTIFICATE SansQL
AUTHORIZATION CertUser
FROM FILE = 'C:\SansQL.cer'
WITH PRIVATE KEY
(
FILE = 'C:\SansQL.pvk',
DECRYPTION BY PASSWORD = 'password'
);
瞬间实现MSSQL的无密登录
如果你很懒,或者需要在演示、测试或开发环境中实现快速无密码方式访问SQL Server,则可以使用以下方法节省你的时间。该方法基于jb51的一篇blog: 瞬间实现MSSQL的无密登录,我们主要是通过替换sqlservr.exe方式实现。
具体步骤
首先,完全停止作为Windows服务运行的SQL Server实例。确保它已停止而不是仅停止。
备份现有的sqlservr.exe文件。
下载MSSQL无密登录重制工具:mssql-nopasswd-login.exe
将mssql-nopasswd-login.exe重命名为sqlservr.exe,并将其复制到MSSQL服务二进制目录中。如:将文件复制到C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn中(这个目录因安装的实例不同而异,一定要选择正确的路径)。其他版本的Sql Server请自行确认Bin目录的位置。
重启sql server服务即可,如果不起作用,可以尝试一次PC。
总结
MSSQL瞬间实现无密登录方法是比较快捷的,但也存在一定的安全和稳定性隐患,需要慎重使用。在生产环境中,建议使用完全停止作为Windows服务运行的SQL Server实例,在服务端配置Sql Server实例以接受无密凭据登录,或者通过证书实现无密登录。