欢迎光临重庆市中国转运网
详情描述
SQL Server 身份验证模式详解

1. 身份验证模式概述

SQL Server 支持两种身份验证模式:

1.1 Windows 身份验证模式

  • 使用 Windows 账户凭据
  • 无需单独管理 SQL Server 登录名
  • 更安全,支持 Kerberos 身份验证

1.2 混合模式 (SQL Server 和 Windows 身份验证)

  • 同时支持 Windows 身份验证和 SQL Server 身份验证
  • SQL Server 身份验证使用用户名/密码
  • 适合需要跨平台访问的场景

2. 设置身份验证模式的步骤

2.1 安装时设置

在 SQL Server 安装过程中选择身份验证模式:

  • 选择 "Windows 身份验证模式" 或 "混合模式"
  • 如果选择混合模式,需要为 sa 账户设置密码

2.2 安装后修改身份验证模式

方法1:使用 SQL Server Management Studio (SSMS)

连接到 SQL Server 实例 右键点击服务器 → 属性 选择 "安全性" 页 更改 "服务器身份验证" 重启 SQL Server 服务

方法2:使用 T-SQL

USE [master]
GO
EXEC xp_instance_regwrite 
    N'HKEY_LOCAL_MACHINE', 
    N'Software\Microsoft\MSSQLServer\MSSQLServer', 
    N'LoginMode', 
    REG_DWORD, 
    2  -- 2 表示混合模式,1 表示 Windows 身份验证
GO
-- 重启 SQL Server 服务使更改生效

3. 创建和管理 SQL Server 登录名

3.1 创建 SQL Server 登录名

-- 创建 SQL Server 登录名
CREATE LOGIN [TestUser] WITH PASSWORD = 'StrongPassword123!',
    DEFAULT_DATABASE = [master],
    CHECK_EXPIRATION = ON,
    CHECK_POLICY = ON

-- 创建带选项的登录名
CREATE LOGIN [AppUser] WITH PASSWORD = 'App@Pass123',
    DEFAULT_DATABASE = [YourDatabase],
    DEFAULT_LANGUAGE = [us_english],
    CHECK_EXPIRATION = OFF,
    CHECK_POLICY = OFF

3.2 修改登录名属性

-- 更改密码
ALTER LOGIN [TestUser] WITH PASSWORD = 'NewStrongPassword456!'

-- 启用/禁用登录名
ALTER LOGIN [TestUser] DISABLE
ALTER LOGIN [TestUser] ENABLE

-- 解锁被锁定的账户
ALTER LOGIN [TestUser] WITH CHECK_POLICY = OFF
ALTER LOGIN [TestUser] WITH CHECK_POLICY = ON

3.3 删除登录名

DROP LOGIN [TestUser]

4. 创建数据库用户并分配权限

USE [YourDatabase]
GO

-- 创建数据库用户
CREATE USER [TestUser] FOR LOGIN [TestUser]
GO

-- 分配角色
EXEC sp_addrolemember 'db_datareader', 'TestUser'
EXEC sp_addrolemember 'db_datawriter', 'TestUser'
GO

-- 授予特定权限
GRANT EXECUTE ON [dbo].[YourStoredProcedure] TO [TestUser]
GRANT SELECT ON [dbo].[YourTable] TO [TestUser]
GRANT INSERT, UPDATE ON [dbo].[AnotherTable] TO [TestUser]
GO

-- 拒绝权限
DENY DELETE ON [dbo].[SensitiveTable] TO [TestUser]
GO

5. 完整示例:设置混合模式并创建用户

5.1 启用混合模式(需要管理员权限)

-- 检查当前身份验证模式
SELECT 
    CASE SERVERPROPERTY('IsIntegratedSecurityOnly')
        WHEN 1 THEN 'Windows Authentication'
        WHEN 0 THEN 'Mixed Mode'
    END AS [Authentication Mode]

-- 启用混合模式(需要重启服务)
EXEC xp_instance_regwrite 
    N'HKEY_LOCAL_MACHINE', 
    N'Software\Microsoft\MSSQLServer\MSSQLServer', 
    N'LoginMode', 
    REG_DWORD, 
    2

5.2 完整的用户创建示例

-- 1. 创建登录名
CREATE LOGIN [WebAppUser] 
WITH PASSWORD = 'WebApp@Secure#2024',
    DEFAULT_DATABASE = [AppDatabase],
    DEFAULT_LANGUAGE = [us_english],
    CHECK_EXPIRATION = ON,
    CHECK_POLICY = ON

-- 2. 在特定数据库中创建用户
USE [AppDatabase]
GO

CREATE USER [WebAppUser] FOR LOGIN [WebAppUser]
GO

-- 3. 分配数据库角色
ALTER ROLE [db_datareader] ADD MEMBER [WebAppUser]
ALTER ROLE [db_datawriter] ADD MEMBER [WebAppUser]
ALTER ROLE [db_executor] ADD MEMBER [WebAppUser]  -- 如果存在此角色

-- 4. 授予额外权限
GRANT VIEW DEFINITION TO [WebAppUser]
GRANT EXECUTE TO [WebAppUser]
GO

-- 5. 创建架构并分配权限
CREATE SCHEMA [WebApp]
GO

ALTER USER [WebAppUser] WITH DEFAULT_SCHEMA = [WebApp]
GO

GRANT CONTROL ON SCHEMA::[WebApp] TO [WebAppUser]
GO

6. 连接字符串示例

6.1 SQL Server 身份验证连接字符串

// C# / .NET
string connectionString = "Server=YourServerName;Database=YourDatabase;User Id=TestUser;Password=StrongPassword123!;";

// 包含更多选项的连接字符串
string connString = @"Server=YourServerName\InstanceName;
                     Database=YourDatabase;
                     User Id=TestUser;
                     Password=StrongPassword123!;
                     MultipleActiveResultSets=True;
                     Connection Timeout=30;
                     Encrypt=True;
                     TrustServerCertificate=False";

6.2 Python 连接示例

import pyodbc

# SQL Server 身份验证
conn_str = (
    "Driver={SQL Server};"
    "Server=YourServerName;"
    "Database=YourDatabase;"
    "UID=TestUser;"
    "PWD=StrongPassword123!;"
)

conn = pyodbc.connect(conn_str)
cursor = conn.cursor()

7. 安全最佳实践

7.1 密码策略

-- 强制密码策略(需要 Windows 密码策略)
CREATE LOGIN [SecureUser] WITH 
    PASSWORD = 'ComplexP@ssw0rd!2024',
    CHECK_POLICY = ON,
    CHECK_EXPIRATION = ON,
    MUST_CHANGE = ON  -- 首次登录时必须更改密码

7.2 定期维护脚本

-- 检查过期的登录名
SELECT 
    name,
    create_date,
    modify_date,
    is_expired,
    is_disabled
FROM sys.sql_logins
WHERE is_expired = 1 OR is_disabled = 1

-- 查找弱密码(空密码或简单密码)
SELECT name 
FROM sys.sql_logins 
WHERE PWDCOMPARE('', password_hash) = 1
   OR PWDCOMPARE(name, password_hash) = 1

7.3 备份登录名脚本

-- 生成创建登录名的脚本
SELECT 
    'CREATE LOGIN [' + name + '] ' +
    'WITH PASSWORD = 0x' + CONVERT(VARCHAR(MAX), password_hash, 2) + ' HASHED, ' +
    'SID = 0x' + CONVERT(VARCHAR(MAX), sid, 2) + ', ' +
    'DEFAULT_DATABASE = [' + default_database_name + '], ' +
    'DEFAULT_LANGUAGE = [' + default_language_name + '], ' +
    'CHECK_EXPIRATION = ' + 
        CASE is_expiration_checked WHEN 1 THEN 'ON' ELSE 'OFF' END + ', ' +
    'CHECK_POLICY = ' + 
        CASE is_policy_checked WHEN 1 THEN 'ON' ELSE 'OFF' END
FROM sys.sql_logins
WHERE name NOT IN ('sa', '##MS_PolicyEventProcessingLogin##', '##MS_PolicyTsqlExecutionLogin##')

8. 故障排除

8.1 常见问题及解决方案

-- 1. 无法连接到 SQL Server
-- 检查 SQL Server 是否正在运行
-- 检查 TCP/IP 协议是否启用
-- 检查防火墙设置

-- 2. 登录失败
-- 检查用户名和密码是否正确
-- 检查账户是否被禁用
SELECT name, is_disabled 
FROM sys.sql_logins 
WHERE name = 'YourLoginName'

-- 3. 重置 sa 密码
ALTER LOGIN sa WITH PASSWORD = 'NewSAPassword!'
ALTER LOGIN sa ENABLE

-- 4. 检查身份验证模式
EXEC xp_loginconfig 'login mode'

-- 5. 查看当前登录信息
SELECT 
    session_id,
    login_name,
    host_name,
    program_name
FROM sys.dm_exec_sessions
WHERE is_user_process = 1

总结

选择身份验证模式:根据安全需求选择 Windows 或混合模式 创建强密码:遵循密码策略,使用复杂密码 最小权限原则:只授予必要的权限 定期审计:检查登录名状态和权限 使用安全连接:在生产环境中启用加密连接

通过以上步骤和示例代码,您可以有效地配置和管理 SQL Server 的身份验证模式,确保数据库访问的安全性和可控性。

相关帖子
重庆市专业网站建设设计#小视频代运营,专业设计团队
重庆市专业网站建设设计#小视频代运营,专业设计团队
用人单位在试用期内,是否必须为员工缴纳社会保险和公积金?
用人单位在试用期内,是否必须为员工缴纳社会保险和公积金?
蘑菇的建筑奇迹:探秘不同种类蘑菇伞盖之下千变万化的菌褶排列艺术。
蘑菇的建筑奇迹:探秘不同种类蘑菇伞盖之下千变万化的菌褶排列艺术。
重庆市网站建设本地公司#AI数字人制作小视频,定制开发
重庆市网站建设本地公司#AI数字人制作小视频,定制开发
重庆市救护车转运跑长途|出租转院救护车
重庆市救护车转运跑长途|出租转院救护车
业主大会在决定公共收益使用时,需要遵循怎样的程序和原则?
业主大会在决定公共收益使用时,需要遵循怎样的程序和原则?
未来电子消费券的发展趋势是什么,是否会与更多生活场景深度绑定?
未来电子消费券的发展趋势是什么,是否会与更多生活场景深度绑定?
德宏长途救护车接送病人|长途医疗转运车出租
德宏长途救护车接送病人|长途医疗转运车出租
在决定为宠物进行昂贵治疗时,主人通常会考虑哪些因素?
在决定为宠物进行昂贵治疗时,主人通常会考虑哪些因素?
在更长的工作生涯中,如何平衡工作压力与身心健康以维持良好状态?
在更长的工作生涯中,如何平衡工作压力与身心健康以维持良好状态?
昭通市长途救护车转运|救护车怎么预约
昭通市长途救护车转运|救护车怎么预约
潍坊市网站定制开发#精准获客系统,提供一站式建站服务
潍坊市网站定制开发#精准获客系统,提供一站式建站服务
面对市场上琳琅满目的头盔,普通消费者应该如何挑选最适合自己的那一款?
面对市场上琳琅满目的头盔,普通消费者应该如何挑选最适合自己的那一款?
社区邻里服务中,有哪些适合老年人发挥余热同时获得相应报酬的岗位?
社区邻里服务中,有哪些适合老年人发挥余热同时获得相应报酬的岗位?
2026年申请最低生活保障需要满足哪些基本条件,家庭收入标准如何界定?
2026年申请最低生活保障需要满足哪些基本条件,家庭收入标准如何界定?
在教育场景中,数字藏品能否成为激励学习和认证成果的新工具?
在教育场景中,数字藏品能否成为激励学习和认证成果的新工具?
房屋漏水维修一般需要花费多少钱,找装修公司还是专业防水团队更靠谱?
房屋漏水维修一般需要花费多少钱,找装修公司还是专业防水团队更靠谱?
西双版纳120救护车租赁|24小时救护车接送
西双版纳120救护车租赁|24小时救护车接送
面对可能变化的退休政策,个人应如何提前规划职业生涯与财务安排?
面对可能变化的退休政策,个人应如何提前规划职业生涯与财务安排?