Procedimiento:
En los ejemplos de estas instrucciones se utiliza el lenguaje C y se asume que conn
es un puntero a una conexión fiable explícita conectada. Se asume que la variable
rc tiene el tipo de datos SQLRETURN. Se asume que el nuevo usuario de variable
es un puntero a una serie de caracteres que contiene el ID de autorización del
usuario al que desea conmutar. Se asume que la contraseña de la variable es un
puntero a una serie de caracteres que contiene la contraseña para dicho ID de
autorización.
1. Llame a la función SQLSetConnectAttr para establecer el atributo
SQL_ATTR_TRUSTED_CONTEXT_USERID. Establézcalo en el ID de
autorización al que desee conmutar.
rc = SQLSetConnectAttr(
conn,
SQL_ATTR_TRUSTED_CONTEXT_USERID, newuser, SQL_NTS
);
//Compruebe si hay errores
Asegúrese de comprobar si hay errores y advertencias, especialmente los que se
listan en la Tabla 6.
Tabla 6. Errores que indican que no ha podido establecerse un nuevo ID de autorización al
conmutar de usuario
SQLCODE Significado
CLI0106E
La conexión no está conectada.
CLI0197E
La conexión no es una conexión fiable.
CLI0124E
Hay un problema con el valor proporcionado. Compruebe que no es nulo, no
es demasiado largo, etc.
CLI0196E
La conexión está implicada en una unidad de trabajo que impide que se
conmute de usuario. Para poder conmutar de usuario, la conexión no debe
estar en una transacción.
2. (Opcional a menos que el contexto fiable que haya admitido este contexto fiable
requiere una contraseña para el ID de autorización al que esté conmutando).
Llame a la función SQLSetConnectAttr para establecer el atributo
SQL_ATTR_TRUSTED_CONTEXT_PASSWORD. Establézcalo en la contraseña
para el nuevo ID de autorización.
rc =
SQLSetConnectAttr(
conn,
SQL_ATTR_TRUSTED_CONTEXT_PASSWORD, passwd, SQL_NTS
);
//Compruebe si hay errores
Asegúrese de comprobar si hay errores y advertencias, tanto los que se listan
en la tabla Tabla 6 como los que se listan en la tabla Tabla 7.
Tabla 7. Errores que indican que no ha podido establecerse una contraseña al conmutar de
usuario
SQLCODE Significado
CLI0198E
El atributo SQL_ATTR_TRUSTED_CONTEXT_USERID todavía no se ha
establecido.
3. Proceda como lo haría con una conexión normal. Si está utilizando un gestor de
transacciones XA, se intentará conmutar el usuario como parte de la siguiente
petición, en caso contrario se intentará conmutar al usuario justo antes de
iniciar la siguiente llamada de función que acceda a la base de datos
53
Capítulo 5. Seguridad