第十三章 Caché 变量大全 $ROLES 变量

文章目录

第十三章 Caché 变量大全 $ROLES 变量

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

大纲

$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值。

示例

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

DHC-APP>WRITE $ROLES
%All,%Manager,%Developer,%DB_%DEFAULT,%DB_CACHE,%DB_CACHEAUDIT,%DB_CACHELIB,%DB_CACHESYS,%DB_CACHETEMP,%DB_DOCBOOK,%DB_DTApp,%DB_SAMPLES,%DB_TrakApp,%DB_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将“已添加角色”列表设置为空字符串,从而删除所有“已添加角色”。用户角色在整个过程中保持不变:

/// 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
}
DHC-APP>d ##class(PHA.TEST.SpecialVariables).Roles()
 
角色已经存在
初始化: %All,%Manager,%Developer,%DB_%DEFAULT,%DB_CACHE,%DB_CACHEAUDIT,%DB_CACHE   LIB,%DB_CACHESYS,%DB_CACHETEMP,%DB_DOCBOOK,%DB_DTApp,%DB_SAMPLES,%DB_TrakApp,%DB_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser
代替: %All,%Manager,%Developer,%DB_%DEFAULT,%DB_CACHE,%DB_CACHEAUDIT,%DB_CACHELI  B,%DB_CACHESYS,%DB_CACHETEMP,%DB_DOCBOOK,%DB_DTApp,%DB_SAMPLES,%DB_TrakApp,%DB_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,%Developer,%DB_%DEFAULT,%DB_CACHE,%DB_CACHEAUDIT,%DB_CACHELIB,%DB_CACHESYS,%DB_CACHETEMP,%DB_DOCBOOK,%DB_DTApp,%DB_SAMPLES,%DB_TrakApp,%DB_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,%Developer,%DB_%DEFAULT,%DB_CACHE,%DB_CACHEAUDIT,%DB_CACHELIB,%DB_CACHESYS,%DB_CACHETEMP,%DB_DOCBOOK,%DB_DTApp,%DB_SAMPLES,%DB_TrakApp,%DB_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaoxin521123

谢谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值