Caché 变量大全 $ROLES 变量

2022-05-10 18:48:46 浏览数 (1)

Caché 变量大全 $ROLES 变量

包含分配给当前进程的角色。

大纲

代码语言:javascript复制
$ROLES

描述

$ROLES包含分配给当前进程的角色列表。此角色列表由逗号分隔的字符串组成,该字符串可以包含用户角色和添加的角色。

通过使用SQL GRANT语句或使用Management Portal System Administration、Security、Users选项将角色分配给用户。选择用户名以编辑其定义,然后选择角色选项卡将该用户分配给角色。可以使用SQL CREATE ROLE语句定义角色,使用SQL DROP ROLE语句删除角色。必须先定义角色,然后才能将其分配给用户。可以使用SQL REVOKE语句撤销用户的角色。

使用JOB命令创建进程时,它将继承与其父进程相同的$ROLES$USERNAME值。

当进程执行I/O重定向时,将使用用户的LOGIN $ROLES值而不是当前的$ROLES值执行此重定向。

授予未列出的角色的角色

将角色授予另一个角色是仅可通过CachéSQL使用的概念。在SQL中使用授予角色的角色来确定用于检查SQL特权的用户角色列表。它们不能被ObjectScript访问。无法通过CachéSystem Security将角色授予其他角色。因此,$ROLES特殊变量列表不包含SQL操作已授予当前角色的任何角色。

SET $ROLES

可以使用SET命令更改$ROLES中包含的列表的“添加角色”部分。设置$ROLES仅会更改进程的“添加角色”。它不能更改其用户角色。将$ROLES设置为“其他角色”的其他列表是受限制的系统功能。但是,此类限制不适用于将$ROLES设置为空字符串,这将删除“添加角色”列表。

必须先定义角色,然后才能添加角色。可以使用SQL CREATE ROLE命令定义角色。 CREATE ROLE不授予角色任何特权。要为角色分配特权,请使用SQL GRANT语句或管理门户网站系统管理,安全性,角色界面。

在使用SET $ROLES升级流程角色之前,必须发出NEW $ROLES语句。

NEW $ROLES

NEW $ROLES堆栈$ROLES$USERNAME的当前值。可以在$ROLES上使用NEW命令,而没有安全限制。

发出NEW $ROLES,然后SET $ROLES以提供“添加的角色”。然后,可以创建使用这些“添加的角色”的对象实例。如果退出此例程,则Caché将使用“添加的角色”关闭对象,然后还原为堆叠的$ROLES值。

示例

以下示例返回当前流程的角色列表。

代码语言:javascript复制
DHC-APP>WRITE $ROLES
%All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser

以下示例首先创建角色Vendor, Sales, 和 Contractor。然后,它显示以逗号分隔的默认角色列表(包含用户角色和添加的角色)。第一个SET $ROLES用Sales 和 Contractor.这两个角色替换“添加的角色”列表。第二个SET $ROLES将Vendor角色连接到“已添加角色”列表。最后的SET $ROLES将“已添加角色”列表设置为空字符串,从而删除所有“已添加角色”。用户角色在整个过程中保持不变:

代码语言:javascript复制
/// d ##class(PHA.TEST.SpecialVariables).Roles()
ClassMethod Roles()
{
CreateRoles
    &sql(CREATE ROLE Vendor)
    &sql(CREATE ROLE Sales)
    &sql(CREATE ROLE Contractor)
    IF SQLCODE=0 { 
        WRITE !,"创建新角色"
        DO SetRoles 
    } ELSEIF SQLCODE=-118 {
        WRITE !,"角色已经存在"
        DO SetRoles 
    } ELSE { 
        WRITE !,"创建角色失败, SQLCODE=",SQLCODE 
    }
SetRoles()
    WRITE !,"初始化: ",$ROLES
    NEW $ROLES
    SET $ROLES="Sales,Contractor"
    WRITE !,"代替: ",$ROLES
    NEW $ROLES
    SET $ROLES=$ROLES_",Vendor"
    WRITE !,"Concatenated: ",$ROLES
    SET $ROLES=""
    WRITE !,"Nulled: ",$ROLES
}
代码语言:javascript复制
DHC-APP>d ##class(PHA.TEST.SpecialVariables).Roles()
 
角色已经存在
初始化: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHE   LIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser
代替: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELI  B,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser,Sales,Contractor
Concatenated: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser,Vendor,Sales,Contractor
Nulled: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser

0 人点赞