SQL中用户和角色的访问控制

用户和角色级安全有助于保护您的数据免受错误或盗窃

所有的关系数据库管理系统提供某种内在安全机制,旨在最大限度地减少数据丢失,数据损坏或数据盗窃的威胁。它们的范围从提供的简单密码保护Microsoft Access到高级关系数据库支持的复杂用户/角色结构甲骨文Microsoft SQL.服务器。一些安全机制对于实现的所有数据库是常见的结构化查询语言

用户级安全

基于服务器的数据库支持a用户类似于计算机操作系统中使用的概念。中找到的用户/组层次结构微软视窗系统在NT和Windows 2000中,你会发现SQL Server和Oracle支持的用户/角色组是相似的。

为每个访问数据库的人创建单独的数据库用户帐户。

避免提供可由多个不同的人访问的通用帐户。首先,这种做法消除了个人责任——如果用户对您的数据库做了更改(比方说给自己涨了5000美元),您将无法通过使用审计日志追踪到特定的人。其次,如果某个特定用户离开了您的组织,而您希望从数据库中删除他或她的访问权限,则必须更改所有用户所依赖的密码。

web开发人员OstapenkoOlena/Getty Images" data-caption="" data-expand="300" id="mntl-sc-block-image_1-0-8" data-tracking-container="true">
OstapenkoOlena/盖蒂图片社

创建用户帐户的方法因平台而异,您必须查阅特定于dbms的文档来了解具体的过程。Microsoft SQL Server用户应调查使用sp_adduser存储过程。Oracle数据库管理员将找到创建用户命令有用。您也可能想要调查替代身份验证方案。例如,Microsoft SQL Server支持使用Windows NT集成安全性。在此方案下,用户通过其Windows NT用户帐户识别到数据库,并且不需要输入其他用户ID和密码以访问数据库。这种方法在数据库管理员中受欢迎,因为它将帐户管理的负担转移到网络管理人员,并为最终用户提供了单一登录的便利。

角色级安全

如果您在具有少数用户的环境中,您可能会发现创建用户帐户并直接为它们分配权限足以满足您的需求。但是,如果您有大量用户,则通过维护帐户和正确的权限来淹没。为了缓解此负担,关系数据库支持角色。数据库角色与Windows NT组类似。用户帐户被分配给角色(s),然后将权限分配给整个角色而不是各个用户帐户。例如,您可以创建DBA角色,然后将您的管理人员的用户帐户添加到此作用。之后,您可以通过简单地分配给角色的权限来为所有当前(和未来)管理员分配特定权限。再次,创建角色的过程因平台而异。SQL Server管理员MS应该调查sp_addrole.存储过程,而Oracle DBA应该使用创建角色语法。

授予的权限

既然我们已将用户添加到我们的数据库,是时候通过添加权限开始加强安全性了。我们的第一步是为用户提供适当的数据库权限。我们将通过使用SQL Grant语句来完成此操作。

这是声明的语法:

格兰特
[上
(GRANT选项)

现在,让我们逐行看一下这个语句。第一行,格兰特,允许我们指定我们授予的特定表权限。这些可以是表级权限(例如选择,插入,更新和删除)或数据库权限(例如Create表,Alter Database和Grant)。可以在单个授权语句中授予多个权限,但表级权限和数据库级别权限可能不会在单个语句中组合。

第二行,

最后,第四行,使用GRANT选项,是可选的。如果此行包含在语句中,也允许受影响的用户对其他用户授予这些相同的权限。请注意,在将权限分配给角色时,无法指定“使用授予”选项。

示例数据库拨款

让我们来看看一些例子。在我们的第一个方案中,我们最近聘请了一组42个数据输入运营商,他们将添加和维护客户记录。它们必须访问客户表中的信息,修改此信息,并将新记录添加到表中。它们不应该完全从数据库中删除记录。

首先,我们应该为每个运算符创建用户帐户,然后将它们全部添加到新角色,DataEntry。接下来,我们应该使用下面的SQL语句来授予它们适当的权限:

授予选择、插入、更新权限
在客户
对DataEntry

现在让我们研究一个分配数据库级权限的案例。我们希望允许DBA角色的成员向数据库添加新表。此外,我们希望它们能够授予其他用户做同样的事情的权限。下面是SQL语句:

格兰特创建表
去DBA.
使用GRANT选项

请注意,我们已包含带有授权选项行,以确保我们的DBA可以将此权限分配给其他用户。

删除权限

SQL包含revoke命令以删除以前授予的权限。这里的语法:

撤销[授予选项]

您将注意到这个命令的语法与GRANT命令相似。惟一的区别是,WITH GRANT OPTION是在REVOKE命令行上指定的,而不是在命令的末尾。作为一个例子,让我们假设我们想要撤销Mary先前授予的从Customers数据库中删除记录的权限。我们将使用以下命令:

撤销删除
在客户
从玛丽

值得一提的是,Microsoft SQL Server还支持另外一种机制——DENY命令。此命令可用于显式拒绝用户的权限,否则用户可能通过当前或未来的角色成员资格拥有该权限。这里的语法:

否认
此页面是否有帮助?