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

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. 注意事项:

权限分配应遵循 最小权限原则,避免过度授权。db_owner 角色权限极高,仅在必要时分配。如果需要撤销权限,使用 REVOKE 语句(如 REVOKE SELECT ON [dbo].[Customers] FROM [NewUser];)。若用户不再需要访问,可删除用户和登录名:-- 删除数据库用户

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_EXPIRATION 和 CHECK_POLICY 选项用于增强密码安全性角色权限应遵循最小权限原则,避免不必要的高权限分配

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

相关推荐

CSS自动换行、强制不换行、强制断行、超出显示省略号
模拟飞行导航数据库是什么
365彩票app老版

模拟飞行导航数据库是什么

📅 11-03 👁️ 484
传闻:EA将复活拳击游戏《搏击之夜》
365彩票app老版

传闻:EA将复活拳击游戏《搏击之夜》

📅 09-07 👁️ 4569