结构化查询语言之 SQL 授权(以Mysql为例)

303 阅读2分钟

@[TOC]

  • 数据的授权包括:

    • 授权读取数据

    • 授权插入新数据

    • 授权更新数据

    • 授权删除数据

    • 每种类型的授权都称为一个权限(privilege)
    • 在数据库的某些特定部分上授权给用户所有这些类型的权限,或者完全不授权,或者这些权限的一个组合
  • 数据库模式上的授权包括:

    • 创建、修改或删除关系等
  • 数据库管理员:拥有最大的授权形式

1. 权限授予

  • 一个创建了新关系的用户将被自动被授予该关系上的所有权限;
  • 授予权限
    • grant 语句:grant <权限列表> on <关系/视图名> to <用户/角色名>
      • select
        • grant select on department to User_1
      • update
        • grant update (budget) on department to User_1
        • update 权限既可以在关系的所有属性上授予又可以只在某些属性上授予;
      • insert
        • insert 权限也可以指定属性列表:对关系的任何插入必须只针对这些属性,系统将其它属性要么赋默认值,要么赋null;
      • delete
      • all privileges
  • SQL授权机制可以对整个关系或一个关系的指定属性授予权限,而不允许对任一关系的指定元祖授予权限;
# create user "User_1"@"localhost" identified by "123456";
# flush privileges;
grant select on department to `User_1`@`localhost`;
grant update (budget) on department to `User_1`@`localhost`; # identified by "123456";

在这里插入图片描述

2. 权限转移

  • 默认情况下,被授予权限的用户/角色无权把此权限授予其它角色;
  • 允许权限转移:with grant option
    • grant select on department to User_1 with grant option;
  • 授权图authorization graph在这里插入图片描述
    • 用户具有权限的充分必要条件是:当且仅当存在从授权图的根(即代表数据库管理员的顶点)到代表给用户顶点的路径;

3. 权限收回

  • 权限收回

    • revoke 语句:revoke <权限列表> on <关系/视图名> from <用户/角色名>
      • revoke select on department from User_1;
      • revoke update (budget) on department from User_1;
    • 如果被收回权限的用户已经把权限授予其它用户,权限的收回会更加复杂; 在这里插入图片描述
  • 用户相互授权破坏权限收回规则:根据用户具有权限的充分必要条件可得,通过相互授权破坏授权规则不可行;

  • 级联收回:在大多数数据库系统中,级联收回是默认行为

    • 防止级联收回:restrict(mysql不支持)
      • revoke select on department from User_1 restrict;
    • 允许级联收回:cascade(mysql不支持)
      • 默认,可省略; 在这里插入图片描述
  • 收回授权权限:revoke grant option, select on department from User_1; 在这里插入图片描述


References: [1] Abraham Silberschatz, Henry F Korth, S Sudarshan. Database System Concepts. New York: McGraw-Hill, 2010 Database System Concepts