当前位置: 首页 > news >正文

SQL Server 数据库创建与用户权限绑定

文章目录

      • 1、 新建数据库
      • 2、创建登录名
      • 3、为数据库创建用户并关联登录名
      • 4、分配数据库角色权限
      • 5、数据库新建用户并分配权限
        • 1. 创建服务器登录名(前提)
        • 2. 创建数据库用户并关联登录名
        • 3. 分配数据库权限
          • 方式一:分配预定义数据库角色(推荐)
          • 方式二:分配细粒度权限(精确控制)
        • 4. 查看用户权限(验证)
        • 5. 注意事项:
      • 6、数据库权限分配,归属于当前登录人员吗
        • 1. 权限分配的执行者(谁来分配)
        • 2. 权限分配的归属(权限给谁)
      • 7、总结
      • 8、说明:

在 SQL Server 中新建数据库并绑定安全登录名的步骤和相关 SQL 语句:

1、 新建数据库

使用 CREATE DATABASE 语句创建新数据库:

-- 创建新数据库
CREATE DATABASE MyNewDatabase
ON PRIMARY 
(NAME = MyNewDatabase_Data,  -- 数据文件逻辑名称FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\MyNewDatabase.mdf',  -- 数据文件路径SIZE = 8MB,  -- 初始大小MAXSIZE = UNLIMITED,  -- 最大大小FILEGROWTH = 64MB  -- 自动增长幅度
)
LOG ON 
(NAME = MyNewDatabase_Log,  -- 日志文件逻辑名称FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\MyNewDatabase.ldf',  -- 日志文件路径SIZE = 8MB,  -- 初始大小MAXSIZE = 2048GB,  -- 最大大小FILEGROWTH = 64MB  -- 自动增长幅度
);

2、创建登录名

使用 CREATE LOGIN 语句创建 SQL Server 登录名:

-- 创建 SQL Server 身份验证的登录名
CREATE LOGIN MyLoginName
WITH PASSWORD = 'StrongPassword123!',  -- 登录密码DEFAULT_DATABASE = MyNewDatabase,  -- 默认数据库CHECK_EXPIRATION = ON,  -- 启用密码过期CHECK_POLICY = ON;  -- 强制密码策略

3、为数据库创建用户并关联登录名

需要先切换到目标数据库,然后创建数据库用户并关联到登录名:

-- 切换到目标数据库
USE MyNewDatabase;
GO-- 创建数据库用户并关联到登录名
CREATE USER MyDatabaseUser FOR LOGIN MyLoginName;
GO

4、分配数据库角色权限

根据需要为用户分配适当的数据库角色:

-- 将用户添加到 db_owner 角色(拥有数据库全部权限)
ALTER ROLE db_owner ADD MEMBER MyDatabaseUser;
GO-- 或者添加到其他角色,如只读角色
-- ALTER ROLE db_datareader ADD MEMBER MyDatabaseUser;
-- GO

5、数据库新建用户并分配权限

在 SQL Server 中为数据库新建用户并分配权限,通常需要先创建登录名(服务器级别的身份),再创建数据库用户(数据库级别的身份),最后分配具体权限。以下是详细步骤和 SQL 语句:

1. 创建服务器登录名(前提)

登录名是服务器级别的身份验证对象,用户需要先有登录名才能访问 SQL Server 实例:

-- 创建 SQL Server 身份验证的登录名
CREATE LOGIN [NewLogin]
WITH PASSWORD = 'YourStrongPassword123!',  -- 强密码DEFAULT_DATABASE = [YourDatabase],   -- 默认连接的数据库CHECK_EXPIRATION = ON,               -- 启用密码过期策略CHECK_POLICY = ON;                   -- 强制密码复杂度策略

如果需要使用 Windows 身份验证(域账号或本地账号),则创建方式为:

-- 创建 Windows 身份验证的登录名(需替换为实际 Windows 账号)
CREATE LOGIN [DOMAIN\WindowsUserName] FROM WINDOWS
WITH DEFAULT_DATABASE = [YourDatabase];
2. 创建数据库用户并关联登录名

切换到目标数据库,创建数据库用户并与已有的登录名关联:

-- 切换到目标数据库
USE [YourDatabase];
GO-- 创建数据库用户,关联到之前创建的登录名
CREATE USER [NewUser] FOR LOGIN [NewLogin];
GO

此时,NewUser 已成为 YourDatabase 数据库的用户,但尚未分配任何权限。

3. 分配数据库权限

根据需求分配权限,常见方式有两种:分配预定义角色分配细粒度权限

方式一:分配预定义数据库角色(推荐)

SQL Server 提供了多个预定义角色,包含常用权限集合,适合快速分配:

-- 切换到目标数据库
USE [YourDatabase];
GO-- 示例1:分配只读权限(只能查询数据)
ALTER ROLE db_datareader ADD MEMBER [NewUser];-- 示例2:分配只写权限(只能插入/更新/删除数据,但不能查询)
ALTER ROLE db_datawriter ADD MEMBER [NewUser];-- 示例3:分配数据库所有者权限(谨慎使用,拥有全部权限)
ALTER ROLE db_owner ADD MEMBER [NewUser];-- 示例4:分配ddl_admin权限(可以创建/修改表等结构,但无数据权限)
ALTER ROLE ddl_admin ADD MEMBER [NewUser];
方式二:分配细粒度权限(精确控制)

如果需要更精细的权限控制(如只允许操作特定表),可以直接分配权限:

-- 切换到目标数据库
USE [YourDatabase];
GO-- 示例1:允许用户查询指定表(如:Customers表)
GRANT SELECT ON [dbo].[Customers] TO [NewUser];-- 示例2:允许用户插入/更新指定表(如:Orders表)
GRANT INSERT, UPDATE ON [dbo].[Orders] TO [NewUser];-- 示例3:允许用户执行指定存储过程
GRANT EXECUTE ON [dbo].[GetOrderDetails] TO [NewUser];-- 示例4:拒绝用户删除操作(优先级高于GRANT)
DENY DELETE ON [dbo].[Customers] TO [NewUser];
4. 查看用户权限(验证)

可以通过以下语句查看已分配的权限:

-- 查看用户所属角色
USE [YourDatabase];
GO
EXEC sp_helpuser [NewUser];-- 查看用户的具体权限
SELECT dp.permission_name,dp.state_desc,OBJECT_NAME(dp.major_id) AS object_name
FROM sys.database_permissions dp
JOIN sys.database_principals dbp ON dp.grantee_principal_id = dbp.principal_id
WHERE dbp.name = 'NewUser';
5. 注意事项:
  1. 权限分配应遵循 最小权限原则,避免过度授权。
  2. db_owner 角色权限极高,仅在必要时分配。
  3. 如果需要撤销权限,使用 REVOKE 语句(如 REVOKE SELECT ON [dbo].[Customers] FROM [NewUser];)。
  4. 若用户不再需要访问,可删除用户和登录名:
    -- 删除数据库用户
    USE [YourDatabase];
    DROP USER [NewUser];-- 删除服务器登录名
    DROP LOGIN [NewLogin];
    

6、数据库权限分配,归属于当前登录人员吗

在 SQL Server 中,数据库权限的分配与"当前登录人员"的关系取决于两个关键点:谁执行权限分配操作权限分配的目标对象

1. 权限分配的执行者(谁来分配)

执行权限分配(GRANT/DENY/ALTER ROLE 等语句)的必须是 具备足够权限的登录名,通常是:

  • 系统管理员(sa 账户)
  • 数据库所有者(db_owner 角色成员)
  • 被显式授予了权限管理权限的用户(如被授予 GRANT ANY PERMISSION 权限的用户)

当前登录人员 若具备上述权限,则可以执行权限分配操作;若没有,则会操作失败。

2. 权限分配的归属(权限给谁)

权限分配的目标是 数据库用户(关联到登录名),而非"当前登录人员"本身,除非明确指定将权限分配给当前登录的用户。

例如:

-- 假设当前登录的是 [AdminLogin],对应的数据库用户是 [AdminUser]-- 情况1:将权限分配给其他用户(与当前登录者无关)
GRANT SELECT ON [dbo].[Orders] TO [NewUser];  -- 权限归属于 [NewUser]-- 情况2:将权限分配给当前登录者自己(权限归属于当前登录者)
GRANT INSERT ON [dbo].[Customers] TO [AdminUser];  -- 权限归属于当前登录者对应的用户

7、总结

  • 权限分配操作 由当前登录人员执行(前提是其有足够权限),但权限本身 归属于被指定的目标用户,而非必然归属于执行者。
  • 权限分配是"将 A 的权限赋予 B"的过程,A 是执行者(需有授权能力),B 是权限的所有者(可以是任何用户,包括 A 自己)。

例如:管理员(A)可以给普通用户(B)分配查询权限,此时权限归属于 B,与 A 无关(除非 A 同时也是 B)。

8、说明:

  • 请根据实际情况修改文件路径、数据库名称、登录名和密码
  • 确保 SQL Server 服务账户对指定的文件路径有写入权限
  • CHECK_EXPIRATIONCHECK_POLICY 选项用于增强密码安全性
  • 角色权限应遵循最小权限原则,避免不必要的高权限分配

执行以上步骤后,就完成了数据库创建、登录名创建以及两者的关联绑定。


文章转载自:

http://QMiYzJm8.zhffz.cn
http://ULQUEEpv.zhffz.cn
http://jJnbb4Kx.zhffz.cn
http://CxopDO0M.zhffz.cn
http://XHDQC3Ka.zhffz.cn
http://RbZB5OVV.zhffz.cn
http://IEK7E5LI.zhffz.cn
http://HMECwHVJ.zhffz.cn
http://Jdop5rcW.zhffz.cn
http://8eg8uRDA.zhffz.cn
http://7baaaxeZ.zhffz.cn
http://Rsme9Rc1.zhffz.cn
http://HTtIUAyK.zhffz.cn
http://cLFO7pGp.zhffz.cn
http://TGYX4apQ.zhffz.cn
http://U1bTBJsb.zhffz.cn
http://NktZK5KB.zhffz.cn
http://MJcAIjlJ.zhffz.cn
http://JDocp7rZ.zhffz.cn
http://bii0iSSo.zhffz.cn
http://hbWIjJ4P.zhffz.cn
http://qKZtVaU0.zhffz.cn
http://qLpX0IaR.zhffz.cn
http://Rzhk59QH.zhffz.cn
http://Z7Akt5Uh.zhffz.cn
http://I3xG6Dar.zhffz.cn
http://AbFAkR0V.zhffz.cn
http://nNawDMBW.zhffz.cn
http://gSAjt0j0.zhffz.cn
http://c7rgbyty.zhffz.cn
http://www.dtcms.com/a/363590.html

相关文章:

  • 构建下一代智能金融基础设施
  • 网络编程 05:UDP 连接,UDP 与 TCP 的区别,实现 UDP 消息发送和接收,通过 URL 下载资源
  • 网络传输的实际收发情况及tcp、udp的区别
  • python 创建websocket教程
  • 异常处理小妙招——1.别把“数据库黑话”抛给用户:论异常封装的重要性
  • GitHub每日最火火火项目(9.2)
  • 使用谷歌ai models/gemini-2.5-flash-image-preview 生成图片
  • Python/JS/Go/Java同步学习(第一篇)格式化/隐藏参数一锅端 四语言输出流参数宇宙(附源码/截图/参数表/避坑指南/老板沉默术)
  • 下载速度爆表,全平台通用,免费拿走!
  • Linux中断实验
  • VibeVoice 部署全指南:Windows 下的挑战与完整解决方案
  • 为什么需要锁——多线程的数据竞争是怎么引发错误的
  • 梯度消失问题:深度学习中的「记忆衰退」困境与解决方案
  • 从C语言入门到精通:代码解析与实战
  • 零知开源——STM32红外通信YS-IRTM红外编解码器集成灯控与显示系统
  • Obsidian本地笔记工具:构建知识网络关联笔记,支持Markdown与插件生态及知识图谱生成
  • 95%企业AI失败?揭秘LangGraph+OceanBase融合数据层如何破局!​
  • 【前端面试题✨】Vue篇(一)
  • 【XR技术概念科普】什么是注视点渲染(Foveated Rendering)?为什么Vision Pro离不开它?
  • 使用gsoap实现简单的onvif服务器:1、编译
  • SpringBoot 整合 RabbitMQ 的完美实践
  • @ZooKeeper 详细介绍部署与使用详细指南
  • 网站搭建应该选择什么服务器?
  • 人体姿态估计与动作分类研究报告
  • 四.shell脚本编程
  • 在时间序列中增加一个阶跃对长期趋势变化的影响
  • 大批量文件管理操作的linux与windows系统命令行终端命令
  • Linux内核进程管理子系统有什么第四十回 —— 进程主结构详解(36)
  • 【网络安全入门基础教程】网络安全行业,未来两年就业和再就业都会很难
  • git: 取消文件跟踪