关系数据库中的权限是通过 SQL 命令、基于角色的访问控制和对象级别的权限相结合来管理的。大多数系统,如 PostgreSQL、MySQL 或 SQL Server,使用一种结构化的方法,其中数据库对象(表、视图、过程)的权限被显式地授予或撤销给用户或角色。核心机制涉及 GRANT
和 REVOKE
SQL 语句,它们定义了用户或角色可以执行哪些操作。例如,GRANT SELECT ON employees TO analyst_role;
允许分配给 analyst_role
的任何人读取 employees
表。权限是分层的:用户可以通过角色继承权限,管理员可以在细粒度级别(例如某些系统中的列或行)管理访问权限。
一个典型的工作流程包括创建角色(例如,read_only
、data_editor
)并为它们分配特定的权限。例如,read_only
角色可能对所有表具有 SELECT
权限,而 data_editor
角色可能具有 INSERT
、UPDATE
和 DELETE
访问权限。然后,将用户分配到一个或多个角色,从而简化权限管理。例如,开发人员可能会授予 api_user
帐户对存储过程的 EXECUTE
权限,但限制直接表访问。一些数据库还支持模式级别的权限——例如,授予对模式的 USAGE
权限以允许访问其中的所有对象。这减少了单独管理每个表权限的需要。
高级功能包括行级安全性(例如,PostgreSQL 的策略)或列级限制。例如,策略可以限制对 department_id
与用户部门匹配的行的访问。所有权也发挥着作用:数据库对象的创建者自动拥有完全权限,并且可以将权限授予他人。诸如最小权限原则之类的安全最佳实践通过仅授予必要的权限来强制执行。审计工具或系统表(例如,information_schema.table_privileges
)有助于跟踪现有权限。例如,查询 SELECT * FROM information_schema.table_privileges WHERE grantee = 'user123';
显示 user123
可以访问哪些表。这种结构化但灵活的系统确保了对数据访问的精确控制。