文章目录

  • 第四十七章 SQL命令 GRANT(一)
  • 大纲
    • 参数
  • 描述
    • GRANT admin-privilege
    • GRANT role
    • GRANT object-privilege
      • 对象所有者权限

第四十七章 SQL命令 GRANT(一)

向用户或角色授予特权。

大纲

GRANT admin-privilege TO grantee [WITH ADMIN OPTION]GRANT role TO grantee [WITH ADMIN OPTION] GRANT object-privilege ON object-list TO grantee [WITH GRANT OPTION]GRANT SELECT ON CUBE[S] object-list TO grantee [WITH GRANT OPTION]GRANT column-privilege (column-list) ON table TO grantee  [WITH GRANT OPTION]

参数

  • grantee - 一个或多个用户或角色的逗号分隔列表。
    有效值是用户列表、角色列表、“*”或_PUBLIC
    星号(*)指定当前定义的所有没有% all角色的用户。
    _PUBLIC关键字指定所有当前定义的和尚未定义的用户。
  • admin-privilege - 被授予的管理级别特权或以逗号分隔的管理级别特权列表。
    该列表可由下列一项或多项按任何顺序组成:
    %CREATE_METHOD%DROP_METHOD%CREATE_FUNCTION%DROP_FUNCTION%CREATE_PROCEDURE%DROP_PROCEDURE%CREATE_QUERY%DROP_QUERY%CREATE_TABLE%ALTER_TABLE, ``%DROP_TABLE%CREATE_VIEW%ALTER_VIEW%DROP_VIEW%CREATE_TRIGGER%DROP_TRIGGER%DB_OBJECT_DEFINITION,授予上述所有16个权限。%NOCHECK%NOINDEX%NOLOCK%NOTRIGGER用于INSERT,UPDATEDELETE操作。%BUILD_INDEXBUILD INDEX`命令授予特权。
  • role - 被授予权限的角色或以逗号分隔的角色列表。
  • object-privilege - 被授予的基本级别特权或以逗号分隔的基本级别特权列表。
    该列表可以包含以下一个或多个:%ALTERDELETESELECTINSERTUPDATEEXECUTEREFERENCES
    可以使用“all [privileges]”或“*”作为参数值授予所有表和视图特权。
    注意,只能授予多维数据集SELECT权限。
  • object-list - 为其授予对象特权的一个或多个表、视图、存储过程或多维数据集的逗号分隔列表。
    可以使用SCHEMA关键字指定将对象特权授予指定模式中的所有对象。
    可以使用" * "指定将对象特权授予当前命名空间中的所有表或所有非隐藏的存储过程。
    注意,多维数据集对象列表需要CUBE(或cubes)关键字,并且只能被授予SELECT权限。
  • column-privilege - 向一个或多个列出的列授予基本权限。
    可用选项有SELECTINSERTUPDATEREFERENCES
  • column-list - 由一个或多个列名组成的列表,用逗号分隔,用括号括起来。
  • table - 包含列列表列的表或视图的名称。

描述

GRANT命令将对指定的表、视图、列或其他实体执行指定任务的权限授予一个或多个指定的用户或角色。
可以进行以下基本操作:

  • 给用户授予特权。
  • 为角色授予特权。
  • 赋予用户角色。
  • 将一个角色赋予另一个角色,创建角色的层次结构。

如果为某个用户赋予特权,则该用户可以立即行使该特权。
如果为角色授予权限,则已被授予该角色的用户可以立即使用该权限。
如果取消特权,用户将立即失去该特权。
一个用户实际上只被授予一次特权。
多个用户可以多次授予一个用户相同的权限,但单个REVOKE会删除该权限。

特权是基于每个名称空间授予的。

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

因为GRANT准备和执行非常快,而且通常只运行一次,所以 IRIS不会在ODBCJDBC或动态SQL中为GRANT创建缓存查询。
执行GRANT命令时,会执行*的扩展。

GRANT admin-privilege

SQL管理(admin)权限适用于用户或角色。
任何没有绑定到任何特定对象的特权(因此是该用户或角色的一般权限)都被认为是管理特权。
这些特权是根据当前名称空间的每个名称空间授予的。

%DB_OBJECT_DEFINITION权限授予所有16个数据定义权限。
它没有授予%BUILD_INDEX%NOCHECK%NOINDEX%NOLOCK%NOTRIGGER权限,这些权限必须显式授予。

%BUILD_INDEX特权授予使用BUILD INDEX命令。
%NOCHECK%NOINDEX%NOLOCK%NOTRIGGER权限授予在INSERTUPDATEINSERT OR UPDATEDELETE语句的约束子句中使用这些选项。
它们对使用%NOINDEX关键字作为谓词条件的前言没有影响。
因为TRUNCATE TABLE执行删除具有%NOTRIGGER行为的表中的所有行,所以必须拥有%NOTRIGGER权限才能运行TRUNCATE TABLE
在准备INSERTUPDATEINSERT or UPDATEDELETE语句时,必须具有适当的%NOCHECK%NOINDEX%NOLOCK%NOTRIGGER权限才能使用该限制。

如果指定的管理特权不是有效的特权名称(例如,由于拼写错误), IRIS将成功完成,并发出SQLCODE 100(到达数据末尾);
IRIS不检查指定的用户(或角色)是否存在。
如果指定的管理权限有效,但指定的用户(或角色)不存在, IRIS将发出SQLCODE -118错误。

GRANT role

这种形式的GRANT将用户分配给指定的角色。
还可以将一个角色分配给另一个角色。
如果接收分配的指定角色不存在 IRIS将发出SQLCODE 100(到达数据末尾)。
如果分配给角色的指定用户(或角色)不存在 IRIS将发出SQLCODE -118错误。
如果不是超级用户,并且正在尝试授予一个不拥有且没有ADMIN OPTION的角色, IRIS将发出SQLCODE -112错误。

使用CREATE ROLE语句创建角色。
如果角色名是分隔的标识符,则在分配时必须将其括在引号中。

角色可以通过SQL GRANTREVOKE命令授予或撤销,也可以通 IRIS System Security:

  • 进入管理界面,选择“系统管理”、“安全”、“用户”,显示当前用户。
    选择所需用户的名称以显示该用户的编辑选项,然后选择Roles选项卡以将用户分配(或取消分配)到一个或多个角色。
  • 进入“管理门户”界面,选择“系统管理”、“安全”、“角色”,显示当前角色。
    选择所需角色的名称以显示该角色的编辑选项,然后选择Assigned to选项卡将该角色分配(或取消分配)给一个或多个角色。
    注意,ObjectScript $ROLES特殊变量不显示授予角色的角色。

GRANT object-privilege

对象特权赋予用户或角色对特定对象的某些权限。
将对象列表上的对象特权授予被授予者。
对象列表可以在当前名称空间中指定一个或多个表、视图、存储过程或多维数据集。
通过使用逗号分隔的列表,单个GRANT语句可以将多个对象上的多个对象特权授予多个用户和/或角色。

以下是可用的对象特权值:

  • %ALTERDELETE权限授予对表或视图定义的访问权。
  • SELECTINSERTUPDATEDELETEREFERENCES权限授予对表数据的访问权限。
  • EXECUTE特权授予对存储过程的访问权。
    执行存储过程或在查询中调用用户定义的SQL函数需要此特权。
    例如:SELECT Field1,MyFunc() FROM SQLUser
    MyTable需要SQLUser上的SELECT权限。
    SQLUser上的MyTableEXECUTE权限。
    MyFunc过程。
  • ALL PRIVILEGES授予所有表和视图权限;
    它不授予EXECUTE权限。

可以使用星号(*)通配符作为对象列表值,将对象特权授予当前命名空间中的所有对象。
例如,GRANT SELECT ON * TO Deborah授予该用户对所有表和视图的SELECT权限。
GRANT EXECUTE ON * TO Deborah授予该用户对所有非隐藏存储过程的EXECUTE权限。

可以使用SCHEMA SCHEMA -name作为对象列表值,将对象特权授予当前命名空间中命名模式中的所有表、视图和存储过程。
例如,GRANT SELECT ON SCHEMA Sample TO Deborah为该用户授予Sample模式中所有对象的SELECT权限。
这包括将来将在该模式中定义的所有对象。
可以将多个模式指定为逗号分隔的列表;
例如,GRANT SELECT ON SCHEMA Sample,Cinema TO Deborah授予SampleCinema模式中所有对象的SELECT权限。

多维数据集是不受模式名称限制的SQL标识符。
要指定多维数据集对象列表,必须指定CUBE(或cubes)关键字。
只能向多维数据集授予SELECT权限。

下面的示例演示了如何为特定表的特定用户授予SELECTUPDATE权限:

ClassMethod Grant()
{d $SYSTEM.Security.Login("_SYSTEM","SYS")
CreateUsers x = $SYSTEM.SQL.UserExists("DeborahTest")if x = 0 {&sql(CREATE USER DeborahTest IDENTIFY BY birdpw)if SQLCODE '= 0 {WRITE "创建用户错误: ",SQLCODE,!q}} else {w "用户DeborahTest已经存在,没有更改权限",!q }
GrantPrivsToUser&sql(GRANT SELECT,UPDATE ON SQLUSER.T1 TO DeborahTest)w !,"GRANT 错误代码: ",SQLCODE
DropUser&sql(DROP USER DeborahTest)if SQLCODE '= 0 {w "DROP USER error: ",SQLCODE,!}
}

权限只能显式授予已经存在的表、视图或存储过程。
如果指定的对象不存在,IRIS将发出SQLCODE -30错误。
但是,可以向一个模式授予特权,该模式将特权授予该模式中所有现有的对象,以及在授予特权时该模式中不存在的所有未来对象。

如果表的所有者是_PUBLIC,则用户访问表不需要被授予对象权限。

如果指定的用户不存在, IRIS将发出SQLCODE -118错误。
如果已经授予了指定的对象特权, IRIS将发出SQLCODE 100(到达数据末尾)。

对象权限可以通过以下方式授予或撤销:

  • GRANTREVOKE命令。
  • $SYSTEM.SQL.Security.GrantPrivileve()$SYSTEM.SQL.Security.RevokePrivileve()方法。这些方法返回%Status值并设置SQLCODE变量。与任何方法或函数一样,始终首先测试返回值:
    • 如果%status=1SQLCODE=0:特权被授予或撤销。
    • 如果%status=1SQLCODE=100:未授予或撤消任何特权,因为它已被授予或撤消。
    • 如果%status不是1,则不设置SQLCODE并且可能未定义:由于方法错误,未授予或撤消任何特权。%Status包含指示失败类型的SQLCODE:ObjPriv:SQLCODE-60表示无效特权;ObjList:指定对象类型的ObjList对象不存在:SQLCODE-30-187-428-473;类型:SQLCODE-400应为表、视图、多维数据集、架构或存储过程的对象类型;用户:SQLCODE-118未知或非唯一的用户或角色。
  • 通过IRIS系统安全。转到管理门户,依次选择System Administration、Security、Users(或System Administration、Security、Roles),选择所需用户或角色的名称,然后选择SQL Tables或SQL Views选项卡。从下拉列表中选择所需的命名空间。然后选择Add Tables或Add Views按钮。在显示的窗口中,选择方案,选择一个或多个表,然后分配权限。

可以通过调用%CHECKPRIV命令来确定当前用户是否具有指定的对象权限。可以通过调用$SYSTEM.SQL.Security.CheckPrivileve()方法来确定指定用户是否具有指定的表级对象权限,如下例所示:

   WRITE "SELECT privilege? ",$SYSTEM.SQL.Security.CheckPrivilege("DeborahTest","1,SQLUSER.TestT1","s"),!WRITE "UPDATE privilege? ",$SYSTEM.SQL.Security.CheckPrivilege("DeborahTest","1,SQLUSER.TestT1","u"),!WRITE "DELETE privilege? ",$SYSTEM.SQL.Security.CheckPrivilege("DeborahTest","1,SQLUSER.TestT1","d"),!

对象所有者权限

表、视图或过程的所有者始终隐式拥有SQL对象的所有SQL特权。该对象的所有者在该对象映射到的所有名称空间中拥有该对象的特权。

第四十七章 SQL命令 GRANT(一)相关推荐

  1. 第六十七章 SQL命令 ROLLBACK

    文章目录 第六十七章 SQL命令 ROLLBACK 大纲 参数 描述 不回滚 回滚日志 事务挂起 ObjectScript事务命令 第六十七章 SQL命令 ROLLBACK 回滚事务. 大纲 ROLL ...

  2. 第八十七章 SQL命令 VALUES

    文章目录 第八十七章 SQL命令 VALUES 大纲 参数 描述 示例 第八十七章 SQL命令 VALUES 指定字段中使用的数据值的INSERT/UPDATE子句. 大纲 (field1{,fiel ...

  3. 第十四章 SQL命令 CREATE TABLE(一)

    文章目录 第十四章 SQL命令 CREATE TABLE(一) 大纲 参数 描述 语法概述 SQL安全和权限 表名 表存在 第十四章 SQL命令 CREATE TABLE(一) 创建表 大纲 CREA ...

  4. 第五十六章 SQL命令 INSERT OR UPDATE

    文章目录 第五十六章 SQL命令 INSERT OR UPDATE 大纲 参数 描述 权限 IDKEY字段 计数器字段 Identity和RowID字段 示例 第五十六章 SQL命令 INSERT O ...

  5. 第六章 SQL命令 CREATE INDEX(一)

    文章目录 第六章 SQL命令 CREATE INDEX(一) 大纲 参数 描述 权限与锁 仅支持兼容性选项 索引名称 现有索引 表明 字段名称 嵌入对象中的字段(`%SerialObject`) 索引 ...

  6. 第三十七章 Caché 命令大全 ZWRITE 命令

    文章目录 第三十七章 Caché 命令大全 ZWRITE命令 重点 大纲 参数 描述 `ZWRITE`不带参数 `ZWRITE`带参数 Variables Non-Display Characters ...

  7. 第三十七章 SQL函数 CURRENT_TIMESTAMP

    文章目录 第三十七章 SQL函数 CURRENT_TIMESTAMP 大纲 参数 描述 精确到小数部分的秒 配置精度 日期和时间函数比较 示例 第三十七章 SQL函数 CURRENT_TIMESTAM ...

  8. 第五十七章 SQL函数 $FIND

    文章目录 第五十七章 SQL函数 $FIND 大纲 参数 描述 $FIND, POSITION, CHARINDEX, INSTR 示例 第五十七章 SQL函数 $FIND 字符串函数,返回字符串中子 ...

  9. 第二十七章 SQL函数 CHARINDEX

    文章目录 第二十七章 SQL函数 CHARINDEX 大纲 参数 描述 CHARINDEX, POSITION, $FIND和INSTR 示例 第二十七章 SQL函数 CHARINDEX 一个字符串函 ...

最新文章

  1. 韩磊老师与C#编程风格
  2. 去除警告: FutureWarning: In future, it will be treated as `np.float64 == np.dtype(float).type`.
  3. adb logcat通过包名过滤(dos命令find后跟变量)
  4. 块语法Block在MVC思维的妙用之多重M层代理传值
  5. Spring的IOC原理
  6. java小编程--在一个A字符串中找到与B字符串一样的,返回B字符串出现的第一个位置
  7. 分区助手扩大c盘后自动修复_磁盘分区工具,这个好用;无论调整C盘还是系统迁移...
  8. 实例探究Python以并发方式编写高性能端口扫描器的方法
  9. laravel 项目迁移_在Laravel迁移
  10. 如何在自己的网站中嵌入其他网站的页面?
  11. 存储过程中进行循环处理数据
  12. cocostudio基础 教程
  13. IntelliJ IDEA破解版2018.3.1(亲测可用)
  14. 苹果将在WWDC首日举行“现场特别活动” 邀请函抽签决定
  15. mybatis-plus 多条件下关键字查询
  16. android wear 2.0.国行,你的智能手表升级Android Wear 2.0系统吗? 快来看看
  17. 在淘宝上遭遇诈骗卖家
  18. c++中new是否会自动初始化
  19. 开源优测-积微速成计划第二次总结
  20. 【前端学习记录】Node.nodeType()

热门文章

  1. linux 街机列表,linux下街机模拟器联机
  2. 安可信esp32 python_ESP8266这么火红背后不得不说的六个理由
  3. 记录DBeaver报SQL 错误 [1064] [42000]: #42000的一个坑
  4. C语言二维数组的大小的获取
  5. (转)用遗传算法优化BP神经网络的Matlab编程实例
  6. Webpack--模块热替换(HMR)
  7. js 判断是域名还是ip并获取当前url中指定部分
  8. java快速生成数据库文档
  9. 【网页制作】制作静态钟表
  10. MyHDL中文手册(十)——转换成Verilog和VHDL