Desenvolvimento de Aplicativos: Aplicativos de Servidor de Programação

Modos de Controle de Execução de Rotinas CLR (Common Language Run Time) (Cláusula EXECUTION CONTROL)

Como administrador do banco de dados ou desenvolvedor de aplicativos, talvez você queira proteger as montagens associadas a suas rotinas externas do DB2 UDB (Universal Database) contra violações indesejadas restringindo as ações de rotinas no tempo de execução. As rotinas do DB2 .NET CLR suportam a especificação de um modo de controle de execução que identifica quais tipos de ações uma rotina tem permissão para executar no tempo de execução. No tempo de execução, o DB2 UDB pode detectar se a rotina tenta executar ações além do escopo do seu modo de controle de execução especificado, o que pode ser útil ao determinar se uma montagem foi comprometida.

Para definir o modo de controle de execução de uma rotina CLR, especifique a cláusula EXECUTION CONTROL opcional na instrução CREATE da rotina. Os modos válidos são:

Para modificar o modo de controle de execução em uma rotina CLR existente, execute a instrução ALTER PROCEDURE ou ALTER FUNCTION.

Se a cláusula EXECUTION CONTROL não for especificada para uma rotina CLR, por padrão, a rotina CLR é executada utilizando o modo de controle de execução mais restritivo, SAFE. As rotinas criadas com este modo de controle de execução podem acessar apenas os recursos que são controlados pelo gerenciador do banco de dados. Os modos de execução menos restritivos permitem que uma rotina acesse arquivos no sistema de arquivos local (FILEREAD ou FILEWRITE) ou na rede. O modo de controle de execução UNSAFE especifica que não devem ser colocadas restrições no comportamento da rotina. As rotinas definidas com o modo de controle de execução UNSAFE podem executar o código binário.

Estes modos de controle representam uma hierarquia de ações permitidas e um modo de nível mais alto inclui as ações permitidas abaixo dele na hierarquia. Por exemplo, o modo de controle de execução NETWORK permite que uma rotina acesse arquivos na rede, arquivos no sistema de arquivos local e recursos que são controlados pelo gerenciador do banco de dados. Utilize o modo de controle de execução mais restritivo e evite utilizar o modo UNSAFE.

Se o DB2 UDB detectar, no tempo de execução, que uma rotina CLR está tentando uma ação fora do escopo do seu modo de controle de execução, o DB2 UDB retornará um erro (SQLSTATE 38501).

A cláusula EXECUTION CONTROL pode ser especificada apenas para rotinas CLR LANGUAGE. O escopo de aplicabilidade da cláusula EXECUTION CONTROL está limitado à própria rotina CLR .NET e não se estende a nenhuma outra rotina que possa ser chamada.

Precisão e Escala Decimais Máximas em Rotinas CLR (Common Language Run Time)

O tipo de dados DECIMAL no DB2 UDB (Universal Database) é representado com uma precisão de 31 dígitos e uma escala de 28 dígitos. O tipo de dados .NET CLR System.Decimal está limitado a uma precisão de 29 dígitos e a uma escala de 28 dígitos. Portanto, as rotinas CLR externas do DB2 UDB não devem designar um valor maior que (2^96)-1, o valor mais alto que pode ser representado utilizando uma precisão de 29 dígitos e uma escala de 28 dígitos, para uma variável de tipo de dados System.Decimal. O DB2 UDB gera um erro de tempo de execução (SQLSTATE 22003, SQLCODE -413) se ocorrer tal designação.

Quando uma instrução CREATE de rotina é executada, se um parâmetro de tipo de dados DECIMAL é definido com uma escala maior que 28, o DB2 UDB gera um erro (SQLSTATE 42611, SQLCODE -604).

[ Início da Página |Página Anterior | Próxima Página | Índice ]