Archive for March, 2009

Nomenclatura de Roles

Friday, March 6th, 2009

A esta altura repasamos ya en el blog varios temas básicos, y hasta tuvimos un pantallazo de la transacción PFCG para poder crear y modificar roles (grupos de autorización o papeles).

Pero ahora hay un tema bastante importante que tratar, porque tiene implicancias bastante serias para el éxito o fracaso de un proyecto de seguridad SAP. Este tema es, justamente, el NOMBRE que les vamos a asignar a estos roles, siendo que el mismo está acotado a 30 caracteres como máximo.

El tema es bastante crítico y existen pocas reglas universales a aplicar al momento de bautizar a los pequeños roles, pero vamos a tratar de enumerar algunas pautas importantes:

1 – La única regla universal… TODOS los roles deben empezar con la letra Z (a lo sumo con la Y)… Esta notación nos va a servir como en cualquier ámbito de SAP para diferenciar lo que nosotros creamos, de lo que es estándar de SAP. Adicionalmente. si trabajamos con los roles estándar sin modificar su nombre y el día de mañana actualizamos la versión de SAP (cosa probable), es también altamente probable que sean sobrescritos por los nuevos, entre otros problemas.

2- Se acabaron las reglas universales… y a partir de ahora arranca la creatividad del diseñador de la seguridad para hacer un buen trabajo. Si aunque parezca mentira, algo de creatividad podemos aplicar en este trabajo ;-)

3- Si existe el requerimiento organizacional que la seguridad sea descentralizada tenemos que preocuparnos por los primeros caracteres que vienen después de la Z. Por ejemplo… si tenemos que crear una seguridad en donde cada oficina de cada país que acceda a SAP va a tener un administrador propio, podríamos empezar nuestro roles como: “ZAR” para Argentina, ZUY para Uruguay, y así sucesivamente.

De esta manera podemos hacer que cada administrador de seguridad esté limitado a gestionar los roles que comiencen con las siglas de su país. Esto se logra limitando a los administradores de seguridad en el objeto S_USER_AGR. Cómo podrán imaginar esta restricción puede hacerse para muchas cosas y por muchos motivos distintos, por ejemplo, para restringir la modificación de roles de base, restringir la modificación de los roles de seguridad, y un largo etc.

El hecho es que solo vamos a poder hacerlo por el principio del nombre de los roles, con lo cual es importante determinar este requerimiento apenas comenzamos a definir la nomenclatura.

4- Otra alternativa es definir, después de la Z, el módulo sobre el que “mayoritariamente” los roles van a dar acceso. Aunque no soy particularmente afecto a esto ya que depende el criterio que se use para construir los roles puede que este no respete los “límites de los módulos de SAP”. En este caso nuestros roles serían algo como “ZAP*”, “ZTR”, etc.

También puede hacerse uso de criterios que nos ayuden a identificar el proceso al que pertenecen los roles (si se encuentran tipificados en la organización)

5- Las posibilidades para las primeras letras son númerosas y mucho va a depender de las necesidades organizacionales. En algunas ocasiones para facilitar la lectura puede utilizarse un separador, pero siempre tengamos en cuenta que la cantidad de caracteres que tenemos para nomenclar un rol son relativamente escasos. Ejemplo: “ZMM:CMPR”, “ZUY:SLCT”

6- Ahora ya utilizamos los primero para la Z, los segundos para el país y hasta a lo mejor alguno más, y nos encontramos parados después de un separador. El resto va a depender mucho de como construyamos en si los roles, si nos enfocamos en puestos de trabajo, en actividades, etc.

En un próximo artículo vamos a tratar especificamente esto, pero hoy escapa un poco a lo que es la nomenclatura. Lo ideal independientemente de esto sería generar nomencladores estandar de 4 letras (+ o – según las variantes) por ejemplo de manera que un rol se llame: “ZAR:CMPR_SLCT”. Así estaríamos creando un rol propio (Z), para Argentina (AR), el cual pertenece al circuito de COMPRAS (CMPR) y su función es la de SOLICITANTE (SLCT).

7- Hasta aquí identificamos un rol, pero nos faltaría identificar en el mismo las variantes, ya que por ejemplo en este caso podrían existir roles separados por Centro, Organización de Compra, etc. Con lo cual el rol si el centro es A001 podría pasar a llamarse “ZAR:CMPR_SLCT-AR01″. De esta manera si utilizamos roles con herencia (Padre e Hijo) podriamos llamar al padre ZAR:CMPR_SLCT y los sucesivos hijos para cada centro serían *-AR01, *-AR02, etc. Podría seguir extendiendose para posibles variantes con Organización de compra hasta que los caracteres alcancen.

Es importante tomar conciencia que la nomenclatura es sumamente importante a la hora de definir los roles, y que adicionalmente es muy importante instalar el tema, incluso, al momento de realizar las definiciones más “grandes” del proyecto. Ya que la complejidad o simplicidad de la seguridad puede verse muchas veces afecta por la nomenclatura que utilizan los Analistas Funcionales a la hora de definir cosas tan globales para SAP como las Sociedades, Centros, Organización de Compras, Tipos de Documento, Divisiones, y un largo Etc.


VN:F [1.8.2_1042]
Rating: 5.0/5 (4 votes cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

Roles Derivados (Padres e Hijos, Herencia)

Thursday, March 5th, 2009

Ya sabemos que existen roles simples (los grupos de autorización o papeles que ya conocemos), otros que pueden ser compuestos (los roles que contienen roles simples, una suerte de grupo), pero hasta ahora no habíamos oído hablar de Roles Derivados o Herencia de Roles.

Los Roles Derivados son  un concepto muy vinculado con los niveles organizacionales. Ya que básicamente nos permiten definir un Rol como Padre, y después un conjunto de Hijos que van a heredar de este algunas características.

Entre estas características los hijos van a heredar los códigos de transacción que el padre posea, como así también (si están definidos) los valores de los objetos de autorización. Pero ahí se encuentra la diferencia con una simple copia de roles… Van a heredar todos los valores MENOS los que estén definidos como niveles organizacionales, estos últimos van a variar de cada hijo en hijo. Esto resulta muy util a la hora de crear permisos abiertos por locación geográfica o por departamento dentro de la organización, o por cualquier criterio para el que se hayan definido criterios como Sociedad, División, Centro, Organización de Compras, etc. De esta manera estos roles compartiran por ejemplo, las actividades que pueden realiarse sobre una Sociedad, pero no la Sociedad sobre las que pueden realizarse.

Por ejemplo: Podríamos tener un rol de nombre Z:ANLS_CBLE como padre, y dos hijo llamados Z:ANLS_CBLE-1000 y Z:ANLS_CBLE-2000 cada uno con permisos a una sociedad distinta. El día de mañana en caso de necesitarse una modificación en la funcionalidad, solo se tocarían los roles padre y la misma se distribuiría en los roles hijos.

Cuando estén trabajando con este tipo de roles, podrán apreciar que en los hijos no pueden realizarse inclusiones de nuevas transacciones, ya  que SAP limita esto y solo pueden realizarse en el padre y heredadas en los hijos.

En un próximo post explicaremos paso a paso la creación de un rol derivado de otro y como se trabaja con los mismos ya que tienen algunas diferencias particulares.

VN:F [1.8.2_1042]
Rating: 2.8/5 (4 votes cast)
VN:F [1.8.2_1042]
Rating: +1 (from 3 votes)

Tips: Transacciones con asignación manual

Wednesday, March 4th, 2009

Es posible en la transacción PFCG agregar transacciones que no están en el menú de usuario de manera manual directamente en los objetos de autorización.

Es importante saber esto al momento de revisar la seguridad configurada en nuestro sistema SAP para no dejar pasar por alto determinados permisos que no aparecen en el menú de usuario, pero si directamente en el objeto de autorización S_TCODE.

Si nosotros ingresamos a modificar los valores de los objetos de autorización dentro de la transacción PFCG e intentamos incorporar un nuevo valor al campo TCD del objeto S_TCODE vamos a ver que SAP no nos lo permite.

El pequeño truco está en ir al botón titulado “Manualmente” e incorporar en el mismo un nuevo objeto de autorización “S_TCODE” de manera que ahora una nueva línea para el campo TCD aparecerá y esta podremos editarla manualmente.

Es interesante notar que si estamos controlando los permisos de los usuarios a través de tablas y chequeamos la tabla AGR_TCODES, estos que incorporemos no van a aparecer ya que la misma solo muestra las transacciones incorporadas a través del menú del Rol o Grupo de Autorización y tendremos que ir a ver especificamente la tabla AGR_1251 y el campo TCD del objeto S_TCODE o ya a más bajo nivel las autorizaciones propiamente dichas (perfiles).

VN:F [1.8.2_1042]
Rating: 4.0/5 (2 votes cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

¿Qué es un nivel organizacional en SAP?

Tuesday, March 3rd, 2009

Como ya sabemos, en SAP nos encontramos con Roles (Grupos de Autorización o Papeles), Transacciones, Objetos de Autorización, Campos y Valores.

Ahora profundizando un poco en este último tema… los valores que le damos a los campos de los objetos de autorización.

Si estuvieron experimentando con SAP , seguramente ya notaron que ciertos valores de campos tienen un signo $ antes de un identificador y que al querer modificarlos manualmente SAP nos advierte que se trata de un nivel organizacional y si queremos romper la relación con el mismo.

¿Qué significa nivel organizacional?

SAP nos brinda esta herramienta para simplificar un poco la administración de los roles, ya que los campos denominados “nivel organizacional” son muchas veces campos que aparecen numerosas veces dentro de los objetos de autorización y que suelen tomar el mismo valor en todos los casos. De esta manera que haciendo click en el botón niveles organizacionales cambiamos todas las ocurrencias de ese campo a lo largo de todos los objetos de autorización de dicho rol.

Los niveles organizacionales son unos pocos campos como ser Sociedad, Centro, División, Organización de Compras, y varios más que hacen a la representación de la organización dentro de SAP.

Es habitual que cuando creemos un rol estemos autorizando a que las acciones que pueden realizarse mediante el mismo sean sobre un mismo “nivel organizacional” o grupo de niveles organizacionales.

Por ejemplo el campo “centro” puede utilizarse para definir distintas locaciones o almacenes de materiales, es probable que nosotros creemos un rol que sea “Comprador para el almacen AR01″ (Por Ejemplo: Z-CMPR_AR01) y varias transacciones hagan referencia a objetos de autorización que utilicen el campo centro, de esta manera definimos al nivel organizacional como AR01 y solamente lo cambiamos en un solo lugar y no en todos los objetos manualmente.

Adicionalmente a esto los niveles organizacionales tienen importancia a la hora de crear “roles derivados” o con herencia padre-hijo pero esto lo vamos a tratar en un próximo post.

VN:F [1.8.2_1042]
Rating: 4.0/5 (2 votes cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

Acceso a Tablas (S_TABU_DIS y otros)

Monday, March 2nd, 2009

Uno de los temas más conflictivos que podemos encontrarnos al tratar de implementar, ajustar, o auditar la seguridad de un sistema SAP es precisamente el acceso a las tablas de datos.

Cómo ya bien contamos en algún artículo previo, SAP a diferencia de otros sistemas, posee a través de su misma interfaz la posibilidad de interactuar con el sistema operativo, las bases de datos, e incluso el acceso directo a los datos en ella almacenada. Por este motivo es que se habla de acceso a tablas en SAP, la información allí almacenada puede ser visualizada y editada dependiendo de algunas condiciones.

Desde determinadas transacciones puede accederse a la visualización y manutención de los datos. Especificamente, en principio hablamos de las transacciones SE16, SE16N, SM16* (todas las variantes), SE17, SM30, SM30* (todas las variantes), SM31, SM31_OLD.

A través de las mismas es posible la modificación o visualización (depende del código de la transacción y los permisos que tengamos) de las tablas, sin pasar por validaciones de integridad referencial o de otro tipo.

Justamente este es el principal problema. Las organizaciones entre muchas de las cualidades que ven en un ERP como SAP es el trabajar con datos con múltiples validaciones, un fuerte control interno, y númerosas verificaciones de integridad intrínsecas del aplicativo. Modificando los datos directamente se pierde la confianza en todas estas características porque los controles no aplican en las mismas.

Este concepto, es el mismo criterio que tiene una auditoría sobre los Controles Generales y los Controles de Aplicación. Primero se debe confiar en los controles generales (evitar fallas en el acceso físico a equipos, al sistema operativo, al servidor de bases de datos, y un largo etc, y luego si se puede empezar a descansar sobre los controles de aplicación, que son los de más alto nivel dentro de las aplicaciones (lógica de negocio o control interno). Si el control interno de la aplicación es una maravilla, pero el acceso a modificar la base de datos es libre la aplicación pierde el sentido para el que fue creada.

Volviendo a temas más técnicos de SAP, estas transacciones además del control por el objeto de autorización S_TCODE correspondiente (a esta altura ya debiéramos saber que todas lo tienen), poseen básicamente 3 objetos de autorización que controlan su comportamiento.

Estos son:

S_TABU_CLI: A través de este objeto se permite la modificación de las tablas independientes de mandante (Ver este link si se desconoce este concepto). Posee un solo campo pudiendo tomar el valor vacio o “X”, siendo este último el que permite la modificación de este tipo especial de tablas. Es requerido para determinadas tareas de customizing y para permitir las modificaciones o nuevos programas en un ambiente de desarrollo.

S_TABU_DIS: Es el objeto que determina si se posee permiso para modificar una tabla determinada. Tiene dos campos uno es el ya conocido Actividad (ACTVT) con las posibilidades 02 (modificar), 03 (visualizar datos) y BD (distribución de customizing), y el otro es DICBERCLS o Grupo de Autorización. Este último campo permite determinar un grupo para ser asignado a tablas (1 o más) el cual puede crearse editando las tablas TBRG y la tabla TDDAT o mediante la transacción SE54 (preferentemente). Las tablas que no poseen un grupo asignado automáticamente adoptan el grupo &NC&, a su vez otro grupo predefinido por ejemplo son las tablas de sistema SS.

S_TABU_LIN: Es propio de las últimas versiones de SAP, su utilización se activa en el customizing (SPRO – SAP NetWeaver – Servidor de Aplicación – Gestión del Sistemas – Usuarios y Autorizaciones – Autorizaciones Referentes a Línea) y permite que los datos sean filtrados por campos determinados. Permitiendo, por ejemplo, que solo pueda visualizarse la información perteneciente al país Argentina (un campos definido en la tbla) cuando se consulta una tabla específica. El bojeto tiene 10 campos (8 criterios posibles), otro de actividad (02 modificar y 03 visualizar) y otro que define el criterio organizacional. Es importante detallar que la definición de númerosas autorizaciones por línea tienen un impacto para nada despreciable en la performance general de las consultas. Un documento detallando la configuración puede verse aquí en idioma inglés.

Resumiendo, resulta de suma importancia restringir el acceso a tablas, en principio la modificación de las mismas directamente solo debiera permitirse como una excepción y como tal no debería ser un permiso estándar incluido en un rol.

En el caso de ser necesario para modificar tablas Z o algunas muy específicas necesidades funcionales siempre debiera otorgarse la modificación de grupos de autorización lo suficientemente acotados para que sepamos cuales son todas las tablas incluidas en los mismos.

A su vez hay que tener sumo cuidado en otorgar el permiso amplio de visualización de tablas (S_TABU_DIS, Actividad 03, Grupo *) ya que se estaría poniendo a disposición del usuario toda la información transaccional de la empresa, la cual muchas veces estaríamos cuidando con restricciones físicas en “el mundo real” pero dejando a libre disposición en los sistemas.

En algún próximo post estaremos tratando la creación de variantes de transacción para la SM30 y SM16, con le fin de restringir la visualización o modificación a una sola tabla.

VN:F [1.8.2_1042]
Rating: 5.0/5 (2 votes cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

¿Cómo funciona la seguridad en SAP?

Monday, March 2nd, 2009

La seguridad de SAP es algo compleja, eso creo que ya lo dijimos, pero todas las cosas pueden ser complejas hasta que las entendemos. En este post vamos a tratar de lograr eso.

Algunos temas los empezamos a tratar en posts anteriores, pero no el proceso completo que pasamos a relatar.

1- El usuario ingresa en SAP R/3 y se le permite su acceso

2- Se cargan desde el maestro de usuarios los roles que el usuario posee (tabla AGR_USERS), a partir de los mismos se obtienen los perfiles que tienen las autorizaciones para esos roles (AGR_1016). Aunque es altamente probable que el sistema SAP directamente miré la tabla UST04 (usuarios y perfiles). En caso de perfiles compuestos estos se encuentran definidos en la tabla UST10C. A su vez la relación entre autorización y perfiles está en la UST10S, y por último los valores que se le otorgan a los objetos de autorización se encuentran en la tabla UST12 (probablemente SAP internamente utilice algunas otras tablas o no haga un uso de todas estas, pero es interesante repasarlo porque puede ser de utilidad para ustedes).

3-  Esta información recopilada es almacenada en el buffer del usuario, el cual tiene para cada usuario todas las autorizaciones que el mismo posee cuando está logueado en el sistema, esta información puede consultarse para el propio usuario o para otro distinto mediante la transacción SU56 o si se necesita un mayor análisis en la tabla USRBF2 (y vínculos a la tabla UST12).

4- A partir de este momento el usuario ya tiene acceso al sistema y todos sus permisos están cargados. El sistema se encuentra a la espera de una acción por parte del mismo.

5- El usuario decide ejecutar una transacción, por ejemplo la FB02 (modificar documento contable).

6- SAP verifica SIEMPRE que el usuario en su buffer posea el permiso para la transacción. Para esto chequea que el objeto de autorización S_TCODE posea el campo TCD y entre sus valores se encuentre el FB02. Este chequeo no depende de la transacción si no que se ejecuta SIEMPRE que una es llamada.

7- Si se posee el valor FB02 se permite la ejecución del código de la transacción y se procede con el mismo, en caso negativo se rechaza automáticamente la solicitud informándole al usuario.

8- Dependiendo de la transacción a ejecutar, la misma puede chequear como primera instancia (antes de la ejecución del código) que se posea un objeto de autorización con un valor determinado para más de un campo. Este objeto, campos y valores se especifican en la definición de la misma a través de la transacción SE93 o la tabla TSTCA donde también pueden consultarse. Este chequeo actúa igual que el del código de transacción y se realiza previo a la ejecución del programa correspondiente a la transacción. En el caso de la transacción FB02 se chequea el objeto F_BKPF_BUK y la actividad (campo ACTVT) con valor 02 (modificación), el campo Sociedad (BUKRS) en esta instancia, no se verifica ya que el valor de chequeo está en blanco). Cabe destacar que no todas las transacciones realizan este chequeo inicial.

9- A partir de este momento se inicia la ejecución del código.

10- El código ABAP de la transacción se ejecuta hasta que dentro del mismo aparezca la instrucción AUTHORITY_CHECK.

11- A través de esta instrucción el programa verifica que los valores especificados para cada campo en la misma se encuentren en el buffer del usuario que la ejecuta. En caso de tenerlos se permite que se continúe la transacción y en caso de ausencia no se permite continuar o se bloquea el acceso a determinada información. Es a decisión del programador de la transacción en que momento se realiza el chequeo, a veces se verifica cuando uno ingresa un valor (por ejemplo la sociedad en la FB02) en donde se verifica el mismo objeto que antes F_BKPF_BUK, pero pidiendo la actividad 02 (modificar) y la sociedad para la cual va a realizarse la modificación (BUKRS).

NOTA 1: Tengamos que cuenta que los campos de un objeto de autorización siempre se verifican en conjunto, quiero decir que la actividad 02 (modificar) solo autoriza a la Sociedad que se encuentra dentro de la misma autorización. Podría ocurrir que dentro de un mismo rol tengamos permiso para modificar una Sociedad pero solo para Visualizar otra. Por eso es importante tener en cuenta que estas son verificadas “en bloque”

NOTA 2: También es importante destacar que es posible y hasta habitual que un usuario tenga más de un ROL asignado, en este caso se produce lo que se conoce como “suma de autorizaciones” y esto quiere decir que los valores solicitados de objetos de autorización pueden encontrarse en cualquiera de los roles que el usuario tiene asignado. Ejemplo: Si en el rol 1 el usuario tiene el acceso a la transacción FB02 (objeto S_TCODE), y en el objeto F_BKPF_BUK la actividad con valor 03 y la sociedad en 0001, pero el programa solicite 02 y 0001 el usuario no podría ingresar a la transacción. Ahora si agregamos un segundo rol al usuario sin ningún objeto S_TCODE pero con el objeto F_BKPF_BUK con valor de actividad 02 y sociedad 0001 el usuario ahora si va a poder tener acceso a ejecutar esta transacción (el primer rol le da el S_TCODE con FB02 y el segundo el F_BKPF_BUK con actividad 02)

Por último cabe destacar que la transacción FB02 necesita de otros objetos de autorización para ser ejecutada pero el nombrado aquí fue solo a modo de ejemplo. En un próximo post veremos un ejemplo completo.

VN:F [1.8.2_1042]
Rating: 4.8/5 (5 votes cast)
VN:F [1.8.2_1042]
Rating: +1 (from 1 vote)