Pregunta

He intentado conceder CONNECT a un usuario a través de un papel:

CREATE ROLE my_role IDENTIFIED BY "passwd";
GRANT CONNECT TO my_role;

CREATE USER my_user IDENTIFIED BY "passwd";
GRANT my_role TO my_user;

Cuando intento esto en 10 g que trabaja muy bien, mientras que en 11 g es rechazada entrada:

ORA-01045: user MY_USER lacks CREATE SESSION privilege; logon denied

La concesión de CREATE SESSION al papel no hace una diferencia.
Sólo puedo iniciar sesión después de la concesión directamente CONNECT (o CREATE SESSION) para el usuario.

¿Ha cambiado de Oracle este comportamiento o estoy haciendo algo mal?

¿Fue útil?

Solución

Creo que podría haber salido con una "característica" de seguridad en 10g. La forma en que leí la Guía de Referencia y Seguridad SQL para 11g indica que las funciones de contraseña habilitada requieren el uso de la SET ROLE my_role IDENTIFIED BY passwd antes de que los derechos otorgados por este papel son eficaces.

No se puede CREATE SESSION hasta que tenga el papel, y no se puede tener el papel hasta que emita SET ROLE.

Catch-22.

Otros consejos

Oracle base de conocimiento [ID 745407.1] explica esto.

La cláusula DEFAULT en la:

alterar funciones predeterminadas de usuario; especifica las funciones otorgadas por defecto para el usuario al iniciar la sesión. Esta cláusula sólo puede contener papeles que han sido otorgados directamente al usuario con un comando GRANT o roles creados por el usuario con el privilegio CREATE ROLE. No se puede utilizar la cláusula DEFAULT PAPEL para permitir:

  1. Los roles no concedidos al usuario

  2. Roles otorgados a través de otras funciones

  3. Los roles gestionados por un servicio externo (tales como el sistema operativo), o por Oracle Internet Directory

  4. Los roles que se autentican contraseña.

  5. Roles que se implementan como funciones de aplicación seguras.

Para papeles autenticado por contraseña, el cambio ha sido introducido en la versión 10.2.0.5 y 11.1.0.7. Para las funciones de aplicación seguras, el cambio ha sido introducido en la versión de Oracle 10.2.0.4 y 11.1.0.7 Estos cambios se aplicarán a todas las futuras versiones. Se introducirán las restricciones mencionadas en la documentación futuro.

Se puede convertir fácilmente los papeles permitido contraseña en papeles estándar ejecutando el script como resultado de:

seleccione 'alter papel '|| papel ||' no identificado;' de dba_roles donde password_required = 'SÍ' y el papel no en (seleccione papel de dba_application_roles);

La activación de funciones predeterminadas (otorgados a un usuario por defecto) que también están protegidas cambiado en Oracle 10g contraseña, versión 10.2.0.5 (al menos para nuestra copia). En el comunicado de 10.2.0.5, un papel protegido por contraseña ya no llegaría a ser activado por defecto. Tenía que ser convertido específicamente en con la contraseña adecuada.

Esto no fue documentado en la medida en que podría decir. Pero cuando nuestros sistemas se actualizan de 10.2.0.4 a 10.2.0.5, este cambio se rompió varios de nuestros sistemas, y tuvimos que crear funciones paralelas no protegidas para nuestras cuentas funcionales que no tienen ningún mecanismo para activar funciones predeterminadas. Básicamente, creamos old_role_batch sin contraseña como una copia de instalacciones OLD_ROLE fue protegido por contraseña.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top