分配库
分配库的目的是让SAS会话可以引用该库
预分配库
有2种方式可以找到库引用
一种是作为管理员,配置环境,让服务器在启动时能找到该库,这种方式称为预分配库。
一种是客户端自己为服务器定义库引用
是否预分配库,考虑下面因素:
1. 预分配大量库时会影响到所有用户执行时变慢
2. 其他安全因素和访问因素
SAS客户端和存储过程可以使用下面2种引擎来访问数据:
a.数据库本身的引擎,如BASE SAS引擎,ORACLE引擎等
b.元数据引擎库(MLE) metadata libname enige
不同引擎的使用会有可能导致安全和使用方式的变化
数据库访问引擎和MLE
如果通过MLE,则你可以控制元数据的访问,如库的访问、表的访问等
当用户通过MLE使用库表时,至少得有读元数据权限和读数据权限
当MLE库通过libname语句定义在autoexec.sas种,则其总是预分配的
LIBNAME libref META LIBID=id|LIBURI=URI-format|LIBRARY=name
<connection-options><engine-options>;
如下面语句:
ORGOLD META library="Orion Gold Customers" METAEEPOSITORY="Foundation";
上面语句能被执行的前提是已经在配置文件种指定这些值:
METASERVER, METAPORT, METAREPOSITORY, METAPROTOCOL,
如果你没有使用MLE引擎,则read/write/delete/create权限是不会其作用的
缺省情况下,MLE不支持创建或者删除表
使用没有被预分配的库
不同的客户端是如何分配库的?如DIS为了保证效率,其会跳过数据访问权限管理而直接连接到库来访问数据,下面是一个列表
SAS OFFICE插件:使用META,要求有库的读元数据权限和表的读权限和读元数据权限
SASEG: 使用META,要求有库的读元数据权限和表的读权限和读元数据权限
SAS DIS:使用直接引擎,要求有库的读元数据权限和表的读元数据权限
SAS OLAP CUBE: 使用直接引擎,要求有库的读元数据权限和表的读元数据权限
SAS INFORMATION MAP: 使用直接引擎,要求有库的读元数据权限和表的读元数据权限
当库没有预分配时存储过程的处理
如果库没有预分配,则分配库的动作是存储过程开发者或者管理员的责任
在存储过程种使用MLE分配库的优点和缺点:
优点:表的访问权限有控制,注意,其访问控制是给予SAS General Server用户身份,而非客户端自己的身份
缺点1:使用的表必须已经定义在元数据上
缺点2:元数据表的名字或者库发生变化,则所涉及到的存储过程都要改变
缺点3:如果存储过程改变了表的结构有可能导致元数据描述不一致现象发生
*非MLE方式的预分配库
一般情况下,建议用MLE方式来预分配库,这样可以统一在SAS平台中进行集中权限管理,但是在一些特定的情况下也可以直接用潜在的引擎直接预分配库,以加快访问速度或者适应其他变化
步骤如下:
a. 指定库预分配标志
b. 添加METAAUTOINIT选项到objspawner 或者添加METAAUTORESOURCES到服务器
把这2个选项加入,可以通过SMC来配置服务器信息,也可以改动指定的配置文件来实现这个目的:
有如下配置文件:
Metadata server:
SAS-config-dir/Lev1/SASMain/MetadataServer/sasv9_MetadataServer.cfg
OLAP server:
SAS-config-dir/Lev1/SASMain/OLAPServer/sasv9_OLAPServer.cfg
Stored Process server:
SAS-config-dir/Lev1/SASMain/StoredProcessServer/sasv9_StorProcSrv.cfg
可以在其中加入-objectserverparms “METAAUTOINIT”
如果非IOM服务器要想自动分配库定义,则应该指定METAAUTORESOURCES选项
METAAUTORESOURCES用于指定SAS应用服务器,如下
-METAAUTORESOURCES “SASMain”
当然,如果是SAS/SHARE,则其配置文件应该如下语句:
-metaautoresources "omsobj:ServerComponent?@Name=SASMain - SAS/SHARE Server"