SQL 中的用户权限

Posted

技术标签:

【中文标题】SQL 中的用户权限【英文标题】:User permissions in SQL 【发布时间】:2013-03-05 10:00:00 【问题描述】:

我正在尝试为用户及其权限创建一个表。我的做法是创建了一个名为 Users 的表,该表包含以下字段:

UserID:每个用户的身份。 密码:用户登录时使用的密码。 权限:这包括以下内容:

如果给用户的权限是1001,用户可以查看数据(会出现一个屏幕,有两个选项:第一个选项是查看当前项目的数据,第二个选项是查看当前项目的数据过去的项目)。 如果授予用户的权限是1002,则用户可以插入和查看数据。 如果给用户的权限是1003,用户可以查看、插入和更新数据。

通过我在SQL中的权限搜索,我发现这种方式不是一个好方法,也就是说它不专业。请大家给我你对我所做的事情的看法吗?如果您认为这不是一个好方法,请给我一些专业的方法。

【问题讨论】:

您可以使用按位权限掩码指定用户可以访问哪些功能,也可以使用关系表。 还要注意,您不应该以纯文本形式存储密码。您应该将它们存储为“salted hash” - 谷歌以获取大量信息。 【参考方案1】:

我将使用不同的方法。

添加另一个名为 Permissions 的表

CREATE TABLE Permissions
(
    PermissionID int Not null
    Description nvarchar(255) NOT NULL
)
CONSTRAINT [PK_permissions] PRIMARY KEY CLUSTERED 
(
[PermissionID] ASC
) ON [PRIMARY]

还有一个叫做 UserPermissions

CREATE TABLE UserPermissions
(
    UserID int Not Null
    PermissionID int Not null
)
CONSTRAINT [PK_user_permissions] PRIMARY KEY CLUSTERED 
(
      [UserID]ASC,
[PermissionID] ASC
) ON [PRIMARY]

通过这种方式,每个权限都有一个适当的记录,并且您通过这样的查询/存储过程获得特定用户允许的权限

SELECT u.UserID, p.PermissionID, p.Description 
FROM Users u INNER JOIN UserPermission up on up.UserID = u.UserID
    INNER JOIN Permissions p on up.PermissionID = p.PermissionID

通过这种方式,您的代码可以检查各个权限,而无需使用位掩码来隔离适当的位,并且(虽然您的问题不需要)编写代码来搜索您的数据库以查找具有特定权限的用户将很容易权限

【讨论】:

以上是关于SQL 中的用户权限的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 2008 权限

SQL Server 查询以查找数据库中所有用户的所有权限/访问权限

Tableau Server 中的直接 SQL Server 连接,业务用户没有数据库的读取权限

SQL server权限管理和备份实例

Oracle把视图查询权限给某用户的SQL是啥?

Oracle把视图查询权限给某用户的SQL是啥?