应用程序开发:服务器应用程序编程

7 7 7

公共语言运行时(CLR)例程执行控制方式(EXECUTION CONTROL 子句)

7

作为数据库管理员或应用程序开发者,您可能想要通过限制例程在运行时的操作来保护与 DB2 Universal Database(DB2 通用数据库,UDB)外部例程相关联的组合件以避免遭到恶意篡改。DB2 .NET CLR 例程支持标识允许例程在运行时执行的操作类型的执行控制方式的规范。在运行时,DB2 UDB 会检测例程是否尝试执行超出其指定执行控制方式的作用域的操作,这有助于确定组合件是否受到危害。

7

要设置 CLR 例程的执行控制方式,在该例程的 CREATE 语句中指定可选 EXECUTION CONTROL 子句。有效方式包括:

7 7

要修改现有 CLR 例程中的执行控制方式,执行 ALTER PROCEDURE 或 ALTER FUNCTION 语句。

7

如果未对 CLR 例程指定 EXECUTION CONTROL 子句,缺省情况下该 CLR 例程会使用最多限制的执行控制方式 SAFE 运行。使用此执行控制方式创建的例程只能访问由数据库管理器控制的资源。较少限制的执行控制方式允许例程访问本地文件系统 7(FILEREAD 或 FILEWRITE)或网络上的文件。执行控制方式 UNSAFE 指定未对例程的行为作任何限制。使用 UNSAFE 7执行控制方式定义的例程可执行二进制代码。

7

这些控制方式表示可允许操作的层次结构,在该层次结构中,较高级别的方式包括的操作在它下面的级别中是允许的。例如,执行控制方式 7NETWORK 允许例程访问网络上的文件、本地文件系统上的文件以及由数据库管理器控制的资源。尽量使用最多限制的执行控制方式并避免使用 UNSAFE 方式。

7

如果 DB2 UDB 在运行时检测到 CLR 例程在尝试其执行控制方式的作用域之外的操作,DB2 UDB 将返回错误(SQLSTATE 38501)。

7

只能对 LANGUAGE CLR 例程指定 EXECUTION CONTROL 子句。EXECUTION CONTROL 7子句的应用能力的作用域仅限于 .NET CLR 例程本身,并未扩展至它可能调用的任何其它例程。

7 7 7

公共语言运行时(CLR)例程中的最大十进制精度和小数位

7

DB2 Universal Database(DB2 通用数据库,UDB)中的 DECIMAL 数据类型的精度为 31 位,小数位为 28 位。.NET CLR System.Decimal 数据类型被限于 29 位精度和 28 位小数位。因此,DB2 UDB 外部 CLR 例程一定不能将超过 (2^96)-1 的值(可使用 29 位精度和 28 位小数位表示的最高值)指定给 7System.Decimal 数据类型变量。如果进行了这种指定,DB2 UDB 将生成运行时错误 (SQLSTATE 22003, SQLCODE -413)。

7

执行例程 CREATE 语句后,如果 DECIMAL 数据类型参数是使用超过 28 的小数位定义的,DB2 UDB 将生成错误 (SQLSTATE 42611, SQLCODE -604)。

[ 页的顶部 |上一页 | 下一页 | 目录 ]