您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

视图提供定制安全性

使用视图授予用户对表的一部分的访问权。

您可以按行或列来定义可访问表的哪些部分。例如,您可能希望禁止一组用户查看 Employees 表的 Salary 列,或者可能希望只允许用户查看其已创建的表的行。

示例 1

销售经理需要访问数据库中有关该部门员工的信息。但是,该经理没有理由访问有关其它部门员工的信息。

为销售经理创建用户 ID,创建可提供其所需信息的视图,并为此销售经理用户 ID 授予相应特权。

  1. 以具有 MANAGE ANY USER 系统特权的用户的身份使用 GRANT 语句创建新用户 ID。由于用户名是 SQL 关键字,因此需要用引号将其引起来。 CONNECT "" IDENTIFIED by ;GRANT CONNECT TO SalesManager IDENTIFIED BY sales

  1. 定义一个只查看销售部门员工的视图。将该表标识为 “DBA”. Employees,并将该表的所有者显式标识出来,以便 SalesManager 用户 ID 能够使用该视图。否则,当 SalesManager 使用该视图时,SELECT 语句会引用该用户 ID 不能识别的表。 CREATE VIEW emp_sales ASSELECT EmployeeID, GivenName, SurnameFROM "DBA".EmployeesWHERE DepartmentID = 200

  1. 授予 SalesManager 查看该视图的特权。使用授予对表的特权时使用的命令授予对视图的特权。 GRANT SELECT ON emp_sales TO SalesManager

    示例 2

    该示例创建一个允许销售经理查看销售订单摘要的视图。定义此视图需要有来自多个表的信息:

  1. 创建视图。 CREATE VIEW order_summary ASSELECT OrderDate, Region, SalesRepresentativeFROM "GROUPO".SalesOrdersKEY JOIN "GROUPO".Customers

  1. 授予 SalesManager 查看该视图的特权。 GRANT SELECTON order_summaryTO SalesManager

  1. 要检查该过程是否正确执行,请连接到 SalesManager 用户 ID,然后查看您创建的视图: CONNECT SalesManager IDENTIFIED BY sales ;SELECT * FROM "GROUPO".emp_sales ;SELECT * FROM "GROUPO".order_summary ;

    未授予 SalesManager 查看基础表的特权。因此,这些命令将生成特权错误:

    SELECT * FROM "DBA".Employees ;
    

    SELECT * FROM "DBA".SalesOrders;

    这些示例说明了如何使用视图来定制 SELECT 特权。您可以使用相同的方法授予对视图的 INSERTDELETEUPDATE 特权。