数据库安全、权限与数据组织
立即解锁
发布时间: 2025-08-30 01:26:18 阅读量: 5 订阅数: 14 AIGC 


掌握SQL:从入门到实践
### 数据库安全、权限与数据组织
在数据库应用开发中,数据的安全性、用户权限管理以及数据的组织方式至关重要。本文将详细介绍数据库连接与权限、数据组织以及视图如何增强数据安全性等方面的内容。
#### 1. 数据库连接与权限
要连接到数据库服务器,需要一个数据库账户。通常,该账户由密码保护,或者要求用户已通过计算机操作系统的身份验证。这一过程被称为身份验证。需要注意的是,大多数数据库管理系统(DBMS)产品中,数据库账户和系统账户是不同的,多人可以使用同一个数据库账户同时连接到数据库,甚至可以从不同的系统账户进行连接。不过,DB2 是个例外,它依赖现有的系统账户,无需创建数据库账户。
连接权限受到严格控制,用户可能只能从网络中的部分机器连接到数据库服务器。操作系统的身份验证通常要求用户从运行 DBMS 软件的同一台机器进行连接,并且系统账户与数据库账户之间存在关联,这种关联通常源于操作系统和数据库中相似的账户名。有时,管理员会明确将系统账户映射到数据库账户,以便用户无需密码即可连接。
连接到数据库只是开始,要进行更多操作,还需要特殊权限,权限主要分为两类:
- **系统权限**:大致对应 SQL 中的数据定义语言(DDL)部分,涉及数据库中对象的创建、修改和删除等操作。例如,创建表、存储过程和触发器等都需要相应的系统权限。除 MySQL 外,在自己创建的表上创建索引通常不需要特殊权限,但在 MySQL 中,后续添加索引需要特殊权限。系统权限由管理员授予,管理员会为开发人员、应用表所有者和普通用户创建账户,并通过特权账户连接到数据库来授予权限。如果遇到权限不足的错误信息,应联系数据库管理员解决。
- **数据权限**:也称为对象权限或表权限,对应 SQL 中的数据操作语言(DML)部分,包括查询、插入、更新和删除数据等操作。创建表时,用户对该表拥有所有权限,但通常不会将如此广泛的权限授予所有用户,而是希望以受控的方式共享数据。例如,在电子商务网站中,普通用户可以创建新订单,但只有部分员工可以添加新商品、更新价格或创建促销活动,并且不允许任何人删除表。此外,数据权限还包括调用存储过程或函数的权限。
在 SQL 中,使用 `grant` 关键字授予权限,使用 `revoke ... from` 关键字撤销权限。例如:
```sql
-- 授予查询 countries 表的权限
grant select on countries to john_doe;
-- 授予多个权限
grant select, insert on movies to john_doe;
grant select, insert, delete on credits to john_doe;
grant select, insert, update(died) on people to john_doe;
-- 撤销删除 credits 表的权限
revoke delete on credits from john_doe;
```
权限还可以传递,但初始权限必须带有 `with grant option` 限定符。不过,这种功能很少使用,为了安全起见,通常只有对象所有者才能授予权限。
#### 2. 数据组织
在开发实际的数据库应用时,不仅要考虑表和程序,还要考虑如何组织数据,以便将应用安装到不同的计算机上。大多数情况下,不能要求用户使用专用的数据库服务器,因此需要将应用集成到现有的数据库服务器中。
所有 DBMS 产品都认为,一个应用所需的数据库对象集合(包括表、视图、索引、存储过程和函数等)应称为一个模式(schema)。对象在模式中创建,模式有名称,且表名在模式内是唯一的。用户引用表时,通常需要在表名前加上模式名和点号。例如:
```sql
select title, year_released
from moviedb.movies
where country = 'jp';
```
然而,在应用中指定模式名可能存在一些问题,如 SQL 语句冗长、可能与现有模式名冲突以及难以切换到不同的模式进行培训等。因此,所有产品都提供了更改用户默认模式或创建表别名的方法。
模式由数据库账户拥有,该账户可以授予其他账户访问或修改模式中表的权限,或运行存储过程的权限。在实际应用中,如果有大量数据库账户,数据库管理员会创建权限组,即角色(role),并将角色授予数据库账户。例如:
```sql
-- 在 Oracle、DB2 或 Postgres 中创建角色
create role moviedb_user;
-- 在 SQL Server(7 及以上版本)中创建角色
sp_addapprole 'moviedb_user';
```
部分产品还允许将权限授予 `public`,表示所有用户,包括现有账户和未来创建的账户。
#### 3. 视图增强数据安全性
视图不仅可以作为复杂查询的便捷表示,还在数据访问控制方面发挥着重要作用。
##### 3.1 排除用户可见的列
在表中,某些列可能包含敏感信息,如信用卡号、出
0
0
复制全文
相关推荐










