视图是计算出的表,其中包含了从基表中选择的行和列。在需要授予用户只对表的一部分进行访问的权限的情况下,视图对于安全非常有用。可以用行或列来定义此部分。例如,您可能想要禁止一组用户查看 employee 表的 Salary 列,或者可能想要限制用户,仅允许其查看他们已创建的表的行。
销售经理需要访问数据库中有关该部门雇员的信息。但是,该经理没有理由访问有关其它部门雇员的信息。
此示例介绍了如何为销售经理创建用户 ID,如何创建可提供其所需信息的视图,以及如何给此销售经理用户 ID 授予相应的权限。
使用 GRANT 语句创建新用户 ID。以具有 DBA 特权的用户身份登录,然后执行以下语句:
CONNECT DBA IDENTIFIED by sql; CREATE USER SalesManager IDENTIFIED BY sales; |
定义一个只查看销售部门员工的视图,如下所示:
CREATE VIEW EmployeeSales AS SELECT EmployeeID, GivenName, Surname FROM Employees WHERE DepartmentID = 200; |
表引用可由所有者限定,以避免对名称完全相同的表的多义性引用。
授予 SalesManager 查看该视图的权限:
GRANT SELECT ON EmployeeSales TO SalesManager; |
授予针对视图和针对表的权限时,可以使用完全相同的命令。
下一个示例创建一个允许销售经理查看销售订单汇总的视图。定义此视图需要有来自多个表的信息:
创建视图。
CREATE VIEW OrderSummary AS SELECT OrderDate, Region, SalesRepresentative, CompanyName FROM SalesOrders KEY JOIN Customers; |
授予 Sales Manager 查看该视图的权限。
GRANT SELECT ON OrderSummary TO SalesManager; |
要检查该过程是否正确执行,请连接到 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 权限。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |