第四十八章 SQL命令 GRANT(二)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第四十八章 SQL命令 GRANT(二)相关的知识,希望对你有一定的参考价值。

参考技术A 列权限授予用户或角色对指定表或视图上的指定列列表的指定权限。这允许访问某些表列,而不允许访问同一表的其他列。这提供了比 GRANT OBJECT-PRIVICATION 选项更具体的访问控制,后者定义了整个表或视图的权限。向被授权者授予权限时,应为表授予表级权限或列级权限,但不能同时授予两者。 SELECT 、 INSERT 、 UPDATE 和 REFERENCES 权限可用于授予对单个列中数据的访问权限。

对具有 GRANT OPTION 的表具有 SELECT 、 INSERT 、 UPDATE 或 REFERENCES 对象权限的用户可以向其他用户授予该表的列的相同类型的列权限。

可以指定单个列,也可以指定逗号分隔的列列表。列列表必须用括号括起来。列名可以按任意顺序指定,允许重复。将 COLUMN 特权授予已具有该特权的列不起作用。

以下示例授予两列的UPDATE权限:

可以授予表或视图的列特权。可以向任何类型的被授权者授予列权限,包括用户列表、角色列表、 * 和 _PUBLIC 。但是,不能将星号( * )通配符用于权限、字段名或表名。

如果用户将新记录插入到表中,则只会将数据插入到已授予列权限的那些字段中。所有其他数据列都设置为定义的列默认值,如果没有定义的默认值,则设置为 NULL 。不能向 RowID 和 IDENTITY 列授予列级 INSERT 或 UPDATE 权限。插入时, SQL会自动提供 RowID 和标识列值(如果需要)。

列级权限可以通过 SQL GRANT 和 REVOKE 命令或通过 IRIS System Security授予或撤消。转到管理门户,依次选择System Administration、Security、Users(或System Administration、Security、Roles),选择所需用户或角色的名称,然后选择SQL Tables或SQL Views选项卡。从下拉列表中选择所需的命名空间。然后选择Add Columns按钮。在显示的窗口中,选择一个方案,选择一个表,选择一个或多个列,然后分配权限。

可以使用单个 GRANT 语句指定以下权限组合:

以下示例授予 Deborah 表级 SELECT 和 UPDATE 权限以及列级 INSERT 权限:

以下示例授予 Deborah 列级 SELECT 、 INSERT 和 UPDATE 权限:

对象的所有者自动拥有该对象的所有权限。 GRANT 语句的 TO 子句指定要向其授予访问权限的用户或角色。在使用 TO 选项指定被授权者之后,可以选择指定 WITH GRANT OPTION 关键字子句,以允许被授权者也能够将相同的权限授予其他用户。可以将 WITH GRANT OPTION 关键字子句与对象权限或列权限一起使用。带 CASCADE 的 REVOKE 命令可用于撤消这一系列级联授予的权限。

例如,可以使用以下命令向用户授予对 Employees 表的 Chris %ALTER 、 SELECT 和 INSERT 权限:

为了使 Chris 也能够将这些权限授予其他用户, GRANT 命令包含 WITH GRANT OPTION 子句:

可以使用 %SQLCatalogPriv.SQLUsers() 方法调用来查找 GRANT 语句的结果。

使用 GRANT OPTION 向模式授予权限允许被授权者能够将相同的模式权限授予其他用户。但是,它不允许被授权者授予该架构中指定对象的特权,除非用户已被显式授予该特定对象的特权( GRANT OPTION )。下面的示例显示了这一点:

WITH ADMIN OPTION 子句授予被授权者将其收到的相同权限授予其他人的权利。要授予系统权限,必须已被授予具有 ADMIN 选项的系统权限。

可以授予一个角色,如果这个角色已经通过 ADMIN OPTION 授予给,或者如果拥有 %Admin_Secure:"U" 资源。

授予 WITH ADMIN OPTION 将取代先前没有此选项的相同权限的授予。
因此,如果在没有 WITH ADMIN OPTION 的情况下授予一个用户特权,然后再将相同的特权授予 WITH ADMIN OPTION 用户,那么该用户就拥有 WITH ADMIN OPTION 权限。
但是,没有 WITH ADMIN OPTION 的授予不会取代之前使用该选项授予的相同权限。
要从特权中删除 WITH ADMIN OPTION 权限,必须撤销该特权,然后在不使用此条款的情况下重新授予该特权。

可以使用 $SYSTEM.SQL.Schema.ExportDDL() 方法导出特权。
在此方法中指定表时, IRIS将导出为该表授予的所有表级特权和所有列级特权。

在嵌入式SQL中使用 GRANT 之前,需要以具有适当特权的用户身份登录。
如果不这样做,将导致 SQLCODE -99 错误(特权冲突)。
使用 $SYSTEM.Security.Login() 方法为用户分配适当的权限:

必须具有 %Service_Login:Use 权限才能调用 $SYSTEM.Security 。
登录方法。

SQL特权只能通过 ODBC 、 JDBC 和动态SQL ( %SQL. statement )强制执行。

在系统范围内执行特权取决于 $SYSTEM.SQL.Util.SetOption("SQLSecurity") 方法调用的设置。
要确定当前设置,调用 $SYSTEM.SQL.CurrentSettings() ,它会显示一个 SQL Security ON: setting 。

默认值是1 ( Yes ):用户只能对已被授予权限的表和视图执行操作。
这是该选项的推荐设置。
如果此选项设置为0 ( No ),则更改此设置后启动的任何新进程将禁用SQL Security。
这意味着禁止基于特权的表/视图安全性。
您可以在不指定用户的情况下创建表。
在本例中,管理门户将“ _SYSTEM ”分配为 user ,嵌入式SQL将 “” (空字符串)分配为 user 。
任何用户都可以对表或视图执行操作,即使该用户没有这样做的特权。

下面的示例创建用户、创建角色,然后将角色分配给用户。
如果用户或角色已经存在,则发出 SQLCODE -118 错误。
如果已经完成了特权或角色的分配,则不会发出错误( SQLCODE = 0 )。

下面的示例显示了多个特权的分配。
它创建一个用户和两个角色。
一个 GRANT 语句将这些角色和一组 admin 权限分配给用户。
如果用户或角色已经存在,则发出 SQLCODE -118 错误。
如果已经完成了特权或角色的分配,则不会发出错误( SQLCODE = 0 )。

下面的示例将当前命名空间中所有表上的所有7个基本权限授予所有当前定义的没有 %all 角色的用户:

以上是关于第四十八章 SQL命令 GRANT(二)的主要内容,如果未能解决你的问题,请参考以下文章

WPF学习第四十八章 理解WPF动画

“全栈2019”Java第四十七章:继承与方法

MySQL实战第四十二讲- grant之后要跟着flush privileges吗?

MySQL实战第四十二讲- grant之后要跟着flush privileges吗?

“全栈2019”Java多线程第四十七章:判断锁是否为公平锁isFair()

我的学习之路_第十八章_SQL语句