1. 权限及用户的关系
在 MSSQL 数据库中,用户需要对应有相应的权限。用户权限可以通过授予角色、直接授予权限、授予模式、在程序中将登录信息硬编码、聚合三种方法来分配。若我们的数据库内没有合适的权限,我们需要新建用户并给这个用户分配相应的权限。
1.1 新建用户
新建一个用户的 SQL 模板如下:
CREATE LOGIN [login_name]
WITH PASSWORD=N'password' MUST_CHANGE,
DEFAULT_DATABASE=[database_name],
CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
GO
USE [database_name]
CREATE USER [user_name] FOR LOGIN [login_name];
GO
CREATE LOGIN 用于创建登录名,一个登录名可以对应多个用户。
WITH PASSWORD 用于指定登录名的密码。
MUST_CHANGE 用于强制要求当前登录密码是最初登录时则必须修改,保证账号的安全性。
DEFAULT_DATABASE 用于指定登录名登录到服务器时使用的数据库。
CHECK_EXPIRATION 用于检查密码是否过期。
CHECK_POLICY 用于检查密码是否符合最低密码策略。
CREATE USER 用于为新建的登录名创建一个用户。
使用这个模板可以创建新用户,需要传递三个参数:新用户的用户名 [user_name]、新用户的登录名 [login_name] 和密码 [password]。最后需要将新用户添加到一个已经存在的数据库中。
1.2 给用户分配权限
给 MSSQL 数据库中的用户分配权限有两种方式:
通过授予角色,由数据库管理员将指定角色授权给用户。
直接授予权限,由数据库管理员直接将权限授权给用户。
2. 授予角色
角色是在数据库内定义的一种逻辑实体,可以继承其他角色的权限。通过使用角色,可以更方便管理用户的权限。为了授予权限,我们必须先创建一个角色,然后将这个角色授权给用户。
2.1 新建角色
可以通过以下 SQL 代码创建一个新的数据库角色。
CREATE ROLE [role_name] AUTHORIZATION [dbo];
CREATE ROLE 用于创建一个角色。
可以在这行代码中传递三个参数:要创建的新角色的名称 [role_name]、角色所有者的名称(必须是与服务器上的 sys.database_principals 的 name 列相匹配的名称) [dbo] 和所属的模式的名称。
2.2 授予角色权限
要将一个角色授予给一个用户,需要使用以下语法:
EXEC sp_addrolemember 'role_name', 'user_name';
sp_addrolemember 存储过程被用来将指定用户添加到一个角色中。
以上 SQL 语句中,第一个参数指定要添加用户到角色 [role_name] 中,第二个参数指定要添加到角色的用户名 [user_name]。
3. 直接授予权限
除了用角色来分配权限外,管理员可以直接将权限授予用户。
3.1 授予权限
代码示例:
USE [database_name]
GO
GRANT SELECT, INSERT, UPDATE, DELETE
ON [schema_name].[table_name] TO [user_name];
GO
GRANT 语句用来授权给数据库中的一个用户或者角色执行某个操作所需的权限。
可以根据需要给用户赋予不同的权限,这个 GRANT 语句中 [schema_name] 表示要授权给用户操作权限的数据库架构名称,[table_name] 是要给用户权限的表的名称,然后是需要授权给用户(或角色)执行的权限。
3.2 撤销权限
如果需要撤销权限,可以使用 REVOKE,代码示例:
USE [database_name]
GO
REVOKE SELECT, INSERT, UPDATE, DELETE
ON [schema_name].[table_name] FROM [user_name];
GO
给定的权限将被从用户(或角色)身上撤销。
4. 管理权限
一旦管理员为用户授予权限或创建了新的登录账户,他们就需要管理相关的权限。有一些SQL命令可以检查和修改用户的权限,在管理用户权限时非常有用。
4.1 检查权限
要查看用户的权限,可以使用以下 SQL 命令:
USE [database_name]
GO
EXEC sp_helprotect NULL, '[user_name]'
GO
sp_helprotect 存储过程显示了当前数据库中对象的权限信息。
其中,第一个参数是需要查看权限的对象名称,第二个参数是用户名。
4.2 修改权限
如果管理员需要修改前面授予的权限,可以使用以下 SQL 命令:
USE [database_name]
GO
GRANT UPDATE ON [schema_name].[table_name] TO [user_name]
GO
在这个例子中,UPDATE 操作将添加到 [schema_name].[table_name] 的权限。如果需要删除权限,可以使用 REVOKE 命令,如下所示:
USE [database_name]
GO
REVOKE UPDATE ON [schema_name].[table_name] FROM [user_name]
GO
总结
本文介绍了如何通过创建新用户并为其分配角色或直接授予权限来管理 MSSQL 数据库中的用户权限。在管理员管理用户权限之后,可以通过检查权限和修改权限来进一步管理其权限。