Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 数据库管理 » 配置数据库 » 管理用户 ID、特权和权限 » 使用视图和过程来获得更高的安全性

 

使用视图来定制安全性

视图是计算出的表,其中包含了从基表中选择的行和列。在需要授予用户只对表的一部分进行访问的权限的情况下,视图对于安全非常有用。可以用行或列来定义此部分。例如,您可能想要禁止一组用户查看 employee 表的 Salary 列,或者可能想要限制用户,仅允许其查看他们已创建的表的行。

示例 1

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

此示例介绍了如何为销售经理创建用户 ID,如何创建可提供其所需信息的视图,以及如何给此销售经理用户 ID 授予相应的权限。

  1. 使用 GRANT 语句创建新用户 ID。以具有 DBA 特权的用户身份登录,然后执行以下语句:

    CONNECT DBA
    IDENTIFIED by sql;
    
    CREATE USER SalesManager
    IDENTIFIED BY sales;
  2. 定义一个只查看销售部门员工的视图,如下所示:

    CREATE VIEW EmployeeSales AS
      SELECT EmployeeID, GivenName, Surname
      FROM Employees
      WHERE DepartmentID = 200;

    表引用可由所有者限定,以避免对名称完全相同的表的多义性引用。

  3. 授予 SalesManager 查看该视图的权限:

    GRANT SELECT
    ON EmployeeSales
    TO SalesManager;

    授予针对视图和针对表的权限时,可以使用完全相同的命令。

示例 2

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

  1. 创建视图。

    CREATE VIEW OrderSummary AS
      SELECT OrderDate, Region, SalesRepresentative, CompanyName
      FROM SalesOrders
        KEY JOIN Customers;
  2. 授予 Sales Manager 查看该视图的权限。

    GRANT SELECT
    ON OrderSummary
    TO SalesManager;
  3. 要检查该过程是否正确执行,请连接到 SalesManager 用户 ID,然后查看您创建的视图:

    CONNECT SalesManager
    IDENTIFIED BY sales;
    SELECT *
    FROM DBA.EmployeeSales;
    SELECT *
    FROM DBA.OrderSummary;

由于未授予销售经理查看基表的权限,以下命令将产生权限错误。

SELECT * FROM GROUPO.Employees;
SELECT * FROM GROUPO.SalesOrders;
针对视图的其它权限

前面的示例说明了如何使用视图来定制 SELECT 权限。您可以使用相同的方法授予对视图的 INSERT、DELETE 和 UPDATE 权限。