Está en la página 1de 16

Información del entorno IBM i, AS/400, AIX, Windows, Linux y Unix

Año 33 - Marzo-Abril 2019 Nº 326 Precio: 7 Euros

COLABORACIONES
Como mejorar la seguridad
La presentación del Db2 Mirror ha alrededor de dos temas principales tecnología versión 7.4 y 7.3 versiones
conseguido mucha atención con la disponibilidad así como seguridad", dice (TR) 6, IBM está profundizando en la
introducción la semana pasada de las Alison Butterill, IBM i Product Manager función de Authority Collection y
mejoras del IBM i. Pero IBM ha dado en IBM. "Ésos son los dos temas ampliando su ámbito de actuación.
también su clientela algunas significativas principales. Pero tenemos muchas cosas La Authority Collection dio a las
mejoras de seguridad con los nuevos en todos los ámbitos." instalaciones IBM i una manera para
releases de IBM i, incluyendo mejoras a la IBM dio sus clientes significativas determinar la autoridad mínima que un
Authority Collection y compatibilidad con nuevas capacidades de seguridad basadas usuario requiere para completar una
el protocolo de encriptación “over-the- en usuario, hace dos años con la función de aplicación.
wire” más reciente. introducción de la Authority Collection en
"Nuestros grandes logros giran IBM i 7.3. Ahora, con la actualización de Sigue en página 2

What's that name, again? SUMARIO


Comentado un artículo que describía creerlo! Colaboraciones
como actuar para conseguir un “record Así que, con su permiso, aquí está el
layout” ejecutando Scripts SQL, un amable procedimiento almacenado que escribió
lector comentó que solo había escrito 128 (con un par de ajustes menores), y que
Como mejorar la
procedimientos almacenados y tenía más proporciona la lista de parámetros para un seguridad 2
problemas para recordar los parámetros y procedimiento almacenado (Stored
su orden de los que tenía que recordar Procedure).
nombres de campo de una tabla. ¡Puedo Sigue en página 4
What's that name, again? 4

Nueva BIF 8
Atributos de perfil importantes
Si alguno de ustedes conoce los Se puede especificar características del Que atributos de perfiles
mandatos Crear o Cambiar el Perfil de entorno del usuario, como programa son realmnte importantes 11
usuario, sabrá que hay unas cinco páginas inicial, menú y programas de atención al
de atributos que pueden especificarse para usuario, así como las características de su
un perfil de usuario. ¿Tiene que especificar trabajo, su idioma principal, la prioridad
todos ellos? ¿Son algunos de los de ejecución, el nivel de asistencia y más. Consulting
parámetros más importantes que otros? No es necesario especificar todos los
Siga leyendo para saberlo. parámetros al crear un nuevo perfil; a Nuevas técnicas en el RPG 14
Un objeto de perfil de usuario menudo es suficiente tomar la
(*USRPRF) es lo que define el usuario de configuración predeterminada. Pero hay
IBM i. Al crear o cambiar un perfil de algunos atributos que, desde una
usuario, se puede definir la contraseña, las perspectiva de seguridad, son la clave.
capacidades de seguridad y las asignaciones Vamos a echar un vistazo.
de grupo, pero eso no es todo que se puede
especificar. Sigue en página 11

Nº ejemplares: 8.500 Edita: American Top Tools, S.L.


Depósito Legal: B-18.455-1993
Precio ejemplar: 7,00 euros (Anual 60 ) Via Laietana, 20
Imprime Graficas Altagraf
Difusión: Andorra, Portugal, 08003 Barcelona
Publicación: 10 ediciones
Italia y España Tel. 93 319 16 12 - Fax 93 319 17 55
Alcance: 00/58
Publicidad: Tel. 93 319 17 23 E-mail: att@att.es
COLABORACIONES

Como mejorar la Seguridad


con IBM i 7.4
La presentación del Db2 Mirror ha conseguido mucha La Authority Collection dio a las instalaciones IBM i
atención con la introducción la semana pasada de las una manera para determinar la autoridad mínima que un
mejoras del IBM i. Pero IBM ha dado también su clientela usuario requiere para completar una función de aplicación.
algunas significativas mejoras de seguridad con los Una vez que se determinaron los niveles de autoridad
nuevos releases de IBM i, incluyendo mejoras a la competente, el administrador puede aplicar los cambios
Authority Collection y compatibilidad con el protocolo de manualmente en la configuración de seguridad del IBM i,
encriptación “over-the-wire” más reciente. o utilizar una herramienta de terceros para ello.

"Nuestros grandes logros giran alrededor de dos temas La Authority Collection fue bien recibida por la
principales disponibilidad así como seguridad", dice comunidad, ya que ayudó a garantizar que los usuarios
Alison Butterill, IBM i Product Manager en IBM. "Ésos normales no iban a su trabajo diario con perfiles de
son los dos temas principales. Pero tenemos muchas cosas usuario que incluían autoridades especiales, como
en todos los ámbitos." ALLOBJ, SPLCTL y SECADM.

IBM dio sus clientes significativas nuevas capacidades La realidad es que demasiadas instalaciones de IBM i
de seguridad basadas en usuario, hace dos años con la continúan teniendo demasiados usuarios actuando con
introducción de la Authority Collection en IBM i 7.3. demasiada autoridad. El uso excesivo de las autoridades
Ahora, con la actualización de tecnología versión 7.4 y especiales ha sido un tema recurrente y un problema bien
7.3 versiones (TR) 6, IBM está profundizando en la documentado en los estudios de seguridad de IBM i
función de Authority Collection y ampliando su ámbito de durante más de una década.
actuación.

ATTITUDES Nº 326 2 Marzo-Abril 2019


COLABORACIONES

Cuando se lanzó, la Authority Collection funcionó datos en movimiento (anteriormente se conocía como
desde el punto de vista de los usuarios individuales. Con Secure Sockets Layer o SSL). La especificación para la
IBM i 7.4, IBM ha invertido el punto de vista final del versión 1.3 de TLS se estableció en agosto 2018 y ha sido
producto y ahora permite a los clientes realizar un ampliamente adoptada por la industria de la computación
seguimiento de los requisitos de autorización desde el desde entonces, aunque todavía hay un uso generalizado
punto de vista de los objetos de IBM i. Se admiten los de TLS 1.2.
siguientes tipos de objeto: Sistema de archivos QSYS;
"root" (/); QOpenSys; sistema de archivos definido por el Con el soporte para TLS 1.3, IBM está dando a los
usuario; y objetos de biblioteca de documentos. usuarios las herramientas más recientes para asegurar el
tráfico de red. "TLS 1.3 es la forma más moderna y
El arquitecto jefe de IBM para IBM i, Steve Will, segura de hacer tráfico encriptado", dice Will. "Así que
explica: muchos de nuestros clientes, particularmente en el espacio
"En la versión 7.3 de la misma, era una cosa basada en financiero y la atención sanitaria, están realmente
el usuario, por lo que podría comprobar, por ejemplo, lo utilizando lo más moderno disponible, incluso si no están
que su operador haría o su programador haría." "En 7.4, listos para utilizarlo."
nos dan otra opción, que es decir que quiero asegurarme
de que tengo este objeto en particular bloqueado, no IBM también actualizó el Digital Certificate Manager
importa quién lo esté tocando o tratando de hacer algo (DCM), una herramienta existente en IBM i para gestionar
con él. Así que ahora puede mirarla de otra manera. los certificados utilizados para entrar en sesiones cifradas.
Usted puede decir para cualquier objeto dado, se puede Con IBM i 7.4, IBM ha proporcionado nuevas API de
probar que no hay nadie tocando ese objeto que tenga más DCM que permiten automatizar más aspectos del proceso
autoridad de la que necesita." de gestión de certificados.

Las instalaciones de IBM i pidieron el nuevo enfoque En concreto, IBM ahora proporciona API para
centrado en objetos en la Authority Collection, dice Will. administrar asignaciones de certificados de definición de
"Esto de nuevo es un requisito que hemos obtenido de la aplicación; para administrar la lista de confianza de la
gente que está tratando de certificar a los auditores de entidad emisora de certificados (CA); y para solicitar una
seguridad que están asegurando las cosas", dice. "Este es renovación del certificado y un certificado de importación
el objetivo alcanzado." en el almacén del sistema.

La Authority Collection obtiene varias nuevas vistas Vale la pena señalar que ninguna de estas mejoras de
SQL para mostrar y analizar los datos de autoridad seguridad, soporte para vistas de objetos en la colección
recopilados para los objetos. Las vistas SQL cubren los de la autoridad, soporte para TLS 1,3, ni automatización
objetos almacenados en el sistema de archivos QSYS; en adicional en DCM, se soportan en IBM i 7.3 TR6. Eso es
la "raíz" (/); QOpenSys, o sistema de archivos definido por diseño.
por el usuario; y también objetos almacenados en objetos
de documento y carpetas, según IBM. "Tenemos una serie de mejoras en 7.4 que están
especialmente relacionadas con la seguridad", dice. "A
La otra gran característica de seguridad es la menudo es el caso de que las versiones principales
compatibilidad con la versión 1.3 de TLS. TLS es la requieren una seguridad significativa [actualizaciones].
versión más reciente de Transport Layer Security (TLS), Esas cosas no tienden a desaparecer a medida que la
que es el protocolo de cifrado utilizado para proteger los tecnología se refresca porque tienden a ser omnipresentes."

ATTITUDES Nº 326 3 Marzo-Abril 2019


COLABORACIONES

What's That Name, Again?


Comentado un artículo que describía como actuar para que tiene acceso a la información relevante de las vistas
conseguir un “record layout” ejecutando Scripts SQL, un QSYS2/SYSPROCS y QSYS2/SYSPARMS.
amable lector comentó que solo había escrito 128
procedimientos almacenados y tenía más problemas para • El procedimiento devuelve un conjunto de resultados
recordar los parámetros y su orden de los que tenía que que muestran la posición, el nombre y la definición de
recordar nombres de campo de una tabla. ¡Puedo creerlo! cada parámetro.
Así que, con su permiso, aquí está el procedimiento
almacenado que escribió (con un par de ajustes menores), • Vamos a hablar sobre la última columna
y que proporciona la lista de parámetros para un (PROCEDURE_SPECIFIC_NAME) en un momento.
procedimiento almacenado (Stored Procedure).
CREATE PROCEDURE GETPARMS (
THE STORED PROCEDURE IN PROC_NAME CHAR(128),
El código que sigue muestra la instrucción CREATE IN SCHEMA_NAME CHAR(128)
PROCEDURE para el procedimiento GETPARMS. Los )
puntos sobresalientes son: DYNAMIC RESULT SETS 1
• El procedimiento acepta dos parámetros: El nombre LANGUAGE SQL
del parámetro y el nombre del esquema. SPECIFIC GETPARMS
Nota: *LIBL o blanco son aceptables para el nombre del NOT DETERMINISTIC
esquema. La función UPPER se utiliza con los parámetros READS SQL DATA
por lo que no debe preocuparse de las minúsculas. BEGIN
DECLARE C1 CURSOR FOR SELECT
• Un cursor es declarado para una instrucción SELECT B.ORDINAL_POSITION AS ORD,

ATTITUDES Nº 3256 4 Marzo-Abril 2019


COLABORACIONES

TRIM(SUBSTR(B.PARAMETER_NAME,1,20)) WHERE (A.ROUTINE_


AS PARAMETER_NAME, SCHEMA=UPPER(SCHEMA_NAME) OR
TRIM(SUBSTR(B.DATA_TYPE,1,15)) AS TYPE, '*LIBL'=UPPER(SCHEMA_NAME) OR
DEC(COALESCE(B.CHARACTER_MAXIMUM_ ' '=SCHEMA_NAME) AND
LENGTH, A.ROUTINE_NAME=UPPER(PROC_NAME)
B.NUMERIC_PRECISION,0),5,0) AS SIZE,
DEC(IFNULL( B.NUMERIC_SCALE,0),5,0) AS ORDER BY A.ROUTINE_SCHEMA, A.SPECIFIC_
DECS, SCHEMA,
TRIM(A.SPECIFIC_NAME) || ' IN ' || A.SPECIFIC_NAME, ORD
TRIM(A.ROUTINE_SCHEMA) AS PROCEDURE_
SPECIFIC_NAME FOR READ ONLY ;
OPEN C1 ;
FROM QSYS2/SYSPROCS A INNER JOIN QSYS2/ SET RESULT SETS CURSOR C1 ;
SYSPARMS B END ;
ON A.SPECIFIC_NAME=B.SPECIFIC_NAME
AND El procedimiento devuelve la lista de parámetros para
A.SPECIFIC_SCHEMA=B.SPECIFIC_SCHEMA el procedimiento solicitado (en este caso el Stored
Procedure sp_move_stock in sqlspft.

ATTITUDES Nº 326 5 Marzo-Abril 2019


COLABORACIONES

Agradable y fácil de usar. Pero ¿por qué la columna QSYS2/SYSPARMS.


PROCEDURE_SPECIFIC_NAME al final?
Dado que nuestro procedimiento almacenado acepta el
OVERLOADING nombre del procedimiento, y no el nombre específico,
Una de las cosas realmente claras acerca de los como un parámetro, necesitamos asegurarnos de que
procedimientos almacenados es que se pueden sobrecargar. devolvemos los detalles de todos los procedimientos
Esto significa que puede tener varios procedimientos con almacenados con ese nombre e identifiquemos cuál es
el mismo nombre pero diferentes listas de parámetros. cuál. Por ello aparece la columna PROCEDURE_
SPECIFIC_NAME al final. Éste es un ejemplo de la
Los procedimientos sobrecargados se identifican de salida para el procedimiento sobrecargado sp_increase_
forma única con un nombre específico. Eso es lo que se price.
utiliza en la lógica de unión entre QSYS2/SYSPROCS y

READY TO GO
Ahora, siempre y cuando usted puede recordar el nombre de GETPARMS y qué parámetros son necesarios, usted está
listo para seguir solo.

ATTITUDES Nº 326 6 Marzo-Abril 2019


COLABORACIONES

Nueva BIF: %SCANRPL


y otras funciones incorporadas
Analizamos aquí el uso de determinadas nuevas BIF result = %XLATE( 'ABC': 'XYZ': source);
(Built-in functions) y repasando el uso de las ya conocidas. Cualquier aparición del carácter 'A' en la cadena
Entre las nuevas destacamos la BIF %SCANRPL. Todavía fuente será reemplazada por 'X', 'B' por 'Y’ y 'C' por 'Z'.
encuentro programadores RPG que están confusos por las Así que si asumimos que la fuente contiene '123ABC789
diferencias entre las funciones incorporadas % XLATE ' antes de la operación, después el resultado contendrá
y% REPLACE funciones. Parte de esa confusión, por '123XYZ789'.
supuesto, es el resultado de una ilusión por parte de El error que cometen algunos programadores es pensar
aquellos frustrados por las limitaciones de% XLATE! que %XLATE está reemplazando la combinación de
La primera cosa a recordar al decidir qué función caracteres. En otras palabras, en el ejemplo anterior, se
utilizar es que %XLATE opera en caracteres individuales reemplaza la cadena ' ABC '. Es cierto, pero sólo como
y %REPLACE opera en cadenas. En este sentido son resultado de que los caracteres 'A', 'B' y 'C' han sido
similares a las BIF %SCAN y %CHECK BIF. reemplazados individualmente. Si la entrada hubiera
Antes de estudiar %REPLACE, revisemos rápidamente contenido 'ABD', se habría convertido a 'XYD'. Esta idea
la función de %XLATE. errónea puede resultar en código escrito que "casi"
funciona y que en condiciones de prueba parece funcionar
%XLATE( from : to : input {: startpos} ) correctamente.
Supongamos que queremos reemplazar cualquier
La función de %XLATE es buscar la cadena de aparición de la cadena de caracteres '/*' con '&&'. El
entrada para cualquier instancia de los caracteres programador podría codificar:
individuales contenidos en la cadena fuente y reemplazarlos
con el carácter correspondiente en la cadena resultado. Así result = %Xlate( '/*': '&&': source);
que en este ejemplo:
Pero si bien esto puede parecer a primera vista que

ATTITUDES Nº 326 8 Marzo-Abril 2019


COLABORACIONES

funciona, no sólo convertirá todas las instancias de '/*' subsiguientes, el parámetro de inicio opcional (C) se
sino, que como está operando en un modo carácter por utiliza para omitir más allá de la parte de la cadena que ya
carácter, también traducirá caracteres individuales '/' o '*' se ha procesado.
que probablemente no es lo que se quería. El siguiente
código muestra este efecto: Dcl-S from Varchar(5) Inz('/*');
Dcl-S to Varchar(5) Inz('&&');
Dcl-S from varchar(5) Inz('/*');
Dcl-S to varchar(5) Inz('&&'); Dcl-S position Int(5);
Dcl-S start Int(5);
source = '123ABC789';
result = %XLATE( 'ABC': 'XYZ': source); Dcl-S custName varchar(12);

dsply ('Source: ' + source); Dcl-S marker varchar(10);


dsply ('Result: ' + result);
// This is a valid approach to handling character strings
dsply ('Convert /* to && the wrong way with // - It will result in '&& Leave /these/ and *these* &&'
%Xlate');
dsply ('Convert /* to && the "right" way with
source = '/* Leave /these/ and *these* /*'; %Scan/%Replace');
result = %Xlate(from: to: source);
// - Result contains '&& Leave &these& and result = '/* Leave /these/ and *these* /*';
&these& &&'

dsply ('Source: ' + source);


dsply ('%XLate from ' + from + ' to ' + to );
dsply ('Result is: ' + result);
Hace unos años, realmente se requería una combinación
de %SCAN y %REPLACE para lograr esta tarea.
Actualmente, sin embargo, RPG ha añadido la función
incorporada %SCANRPL y esto funciona como se desea
en este ejemplo (es decir, para reemplazar cada ocurrencia
de una cadena con otra).

Pero supongamos que solo desea reemplazar la


primera (o última o tercera) aparición de la cadena. En ese
caso, aún tendría que utilizar la combinación Scan/
Replace. Así que todavía estoy cubriendo el ejemplo de
usar la combinación aquí. Además he incluido un ejemplo
de la %SCANRPL equivalente en el archivo de código
fuente asociado.

%REPLACE
La sintaxis básica para %REPLACE es:
%REPLACE( replacement : source { :startpos {:
length to replace}} )

El código siguiente muestra cómo las funciones


%SCAN y %REPLACE se pueden utilizar en combinación
para lograr la funcionalidad deseada. La posición de
inicio de la cadena que se va a reemplazar se obtiene
mediante un %SCAN (A) inicial. A continuación, se
utiliza para especificar la posición de inicio para la
operación %REPLACE (B). En las operaciones de análisis

ATTITUDES Nº 326 9 Marzo-Abril 2019


COLABORACIONES

(A) position = %Scan( from: result); de tipo de combinación de correspondencia donde desea
reemplazar un marcador de texto con una cantidad
DoW position > 0; variable de texto. Por ejemplo, el texto base puede incluir
// If replacing all occurrences %SCANRPL works un marcador como "&Name", que vamos a reemplazar
better por el nombre del cliente. Así que podríamos codificar la
// But logic could be added here to check for which operación %REPLACE como esta:
// occurrence(s) should be replaced
(B) result = %Replace( to: result: position); marker = '&Name';
start = position + 1; position = %Scan(marker: source);
(C) position = %Scan( from: result: start); result = %Replace( custName: source: position:
EndDo; %Len(marker));

dsply ('Source: ' + source); Esto provocará que el BIF reemplace "&Name" (cinco
dsply ('%Replace ' + from + ' With ' + to ); caracteres) por el contenido de custName. El código
dsply ('Result is: ' + result); anterior asume que custName es un campo de longitud
variable; Si no fuera así hubiéramos tenido que codificar
Aunque menos útil de lo que era antes de la llegada de %TrimR (custName) como parámetro para evitar la
%SCANRPL, la función %REPLACE tiene un número de inserción de un número potencialmente grande de espacios
características interesante. Por ejemplo, la longitud de la en blanco.
cadena de reemplazo no tiene que coincidir con la
longitud del texto que se va a reemplazar. En tales casos, Hay mucho más que podríamos decir acerca de
el cuarto parámetro opcional se utiliza para especificar el %REPLACE, pero la intención de este artículo es aclarar
número de caracteres que se reemplazarán. las diferencias entre %XLATE y %REPLACE. Además,
como he señalado anteriormente, %SCANRPL ha
Esto hace que el BIF sea muy útil en las operaciones sustituido el uso de %REPLACE en muchos casos.

ATTITUDES Nº 326 10 Marzo-Abril 2019


COLABORACIONES

¿Que atributos de Perfiles son


realmente importantes?
TANTOS ATRIBUTOS, TAN POCO TIEMPO (contraseña) (*NONE).
Si alguno de ustedes conoce los mandatos Crear o
Cambiar el Perfil de usuario, sabrá que hay unas cinco El siguiente parámetro de contraseña que requiere
páginas de atributos que pueden especificarse para un atención es el parámetro Password expirado. Al crear un
perfil de usuario. ¿Tiene que especificar todos ellos? ¿Son perfil que se usará para el inicio de sesión o cuando se
algunos de los parámetros más importantes que otros? restablece una contraseña porque el usuario la ha olvidado,
Siga leyendo para saberlo. establezca el atributo de contraseña caducada en *YES
para que el usuario tenga que cambiar la contraseña
Un objeto de perfil de usuario (*USRPRF) es lo que cuando se use por primera vez.
define el usuario de IBM i. Al crear o cambiar un perfil de
usuario, se puede definir la contraseña, las capacidades de El intervalo de caducidad de contraseña es el parámetro
seguridad y las asignaciones de grupo, pero eso no es todo de contraseña que analizaré al final. Este atributo
que se puede especificar. determina la frecuencia con la que se debe cambiar la
contraseña del perfil. Para los usuarios, animo a dejar este
Se puede especificar características del entorno del valor como *SYSVAL y establecer el valor del sistema
usuario, como programa inicial, menú y programas de QPWDEXPITV en 90 (días) o menos. ¡ Nunca es
atención al usuario, así como las características de su apropiado que un perfil utilizado por un individuo tenga
trabajo, su idioma principal, la prioridad de ejecución, el una contraseña que nunca va a expirar!
nivel de asistencia y más.

No es necesario especificar todos los parámetros al


crear un nuevo perfil; a menudo es suficiente tomar la
configuración predeterminada. Pero hay algunos atributos
que, desde una perspectiva de seguridad, son la clave.
Vamos a echar un vistazo.

PASSWORD ATTRIBUTES
Se inicia con un parámetro de contraseña de usuario.
Al crear un perfil de usuario o restablecer la contraseña de
un usuario, es importante que no tome la configuración
por defecto. El valor por defecto establece la contraseña
como el nombre del Perfil de usuario, que claramente
hace la contraseña fácil de adivinar!

Le animo a establecer incluso la primera contraseña


dada a un perfil a un valor que cumpla las reglas de
contraseña de su organización. Para lograrlo, utilice el
valor del sistema QPWDRULES para especificar las
reglas de composición, incluidos *LMTPRFNAME y *
ALLCRTCHG en la lista de valores.

Algunos perfiles no deben tener una contraseña. Los


perfiles que se crean para poseer objetos, ejecutar trabajos
por lotes o son un perfil de grupo no tienen necesidad de
iniciar sesión o usarse para establecer una conexión y, por
tanto, no necesitan una contraseña. Para eliminar la
posibilidad de que los usuarios inicien sesión con este tipo
de perfil, establezca el atributo password en *NONE

ATTITUDES Nº 326 11 Marzo-Abril 2019


COLABORACIONES

Las cuentas de servicio (los perfiles utilizados para las parámetro de Perfil de Grupo. A continuación, puede
conexiones FTP y ODBC) probablemente tendrán este asignar hasta 15 roles adicionales en el parámetro de
valor establecido en *NOMAX para que los procesos grupo complementario.
automatizados no se interrumpan al expirar las contraseñas.
*NOMAX debe reservarse únicamente para estos tipos de El parámetro Owner de los atributos del Perfil de
perfiles. Le animo a cambiar estas contraseñas Grupo, le permite especificar que los objetos creados por
periódicamente. este perfil deben ser propiedad del grupo denominado en
el parámetro de Perfil de Grupo. Esto es a menudo una
Estas contraseñas están codificadas de forma rígida a buena práctica para establecer para que los usuarios no
menudo en texto claro y suelen ser conocidas por muchas terminen siendo propietarios de objetos, que es
personas. Cambiar periódicamente estas contraseñas especialmente útil cuando se elimina un perfil. Sin
ayudará a evitar que las cuentas de servicio se utilicen embargo, tenga en cuenta que este parámetro se ignora
para algo que no sea el propósito previsto. cuando el usuario crea algo en el IFS. En otras palabras,
el usuario retiene la propiedad de los objetos creados en
Para los perfiles cuya contraseña se establece en el IFS.
*NONE, deje este valor como *SYSVAL en lugar de
*NOMAX. El sistema no mira este parámetro cuando la LIMITED CAPABILITY
contraseña es *NONE, por lo que no es necesario que El parámetro de capacidad limitada determina si los
estos perfiles aparezcan como si tuvieran una contraseña usuarios pueden escribir mandatos cuando pueden acceder
que no expira. a una línea de mandatos. Aunque el parámetro de

USER CLASS AND SPECIAL AUTHORITIES


El parámetro User Class es una forma sencilla de
establecer de forma predeterminada las autorizaciones
especiales que se asignan a un perfil de usuario, pero
nunca se utiliza en el algoritmo de comprobación de
autoridad, por lo que no lo mire una vez que se haya
creado el perfil. De mayor preocupación deberían ser las
autoridades especiales asignadas al perfil. Las autoridades
especiales proporcionan al usuario la capacidad de realizar
alguna función.

He discutido estos ajustes en otros artículos, así que


no voy a describirlos individualmente. Baste decir, que a
los perfiles sólo deben asignarse las autoridades especiales
requeridas para desempeñar su trabajo, nada más. Esto
sigue el concepto de "acceso con privilegios mínimos",
que es la práctica de otorgar solo las capacidades
requeridas, nunca más.

A menudo a los perfiles se les conceden autorizaciones


especiales que no necesitan debido a la práctica de copiar
un perfil al crear uno nuevo. Aunque entiendo la facilidad
de copiar un perfil en lugar de crear uno desde cero, le
animo a crear perfiles de modelo o de plantilla que
representen los roles en su sistema y copiar uno de ellos,
en lugar del perfil de un usuario existente que puede tener
más derechos que los que se debe asignar un nuevo perfil.

GROUP PROFILE AND SUPPLEMENTAL GROUPS


Los campos de Perfil de Grupo permiten asignar
usuarios a un rol. A menudo, los usuarios son miembros
de varios roles, por lo tanto, es necesario especificar
varios grupos. Asigne el rol más utilizado (grupo) al

ATTITUDES Nº 326 12 Marzo-Abril 2019


COLABORACIONES

capacidad limitada se omite en muchas conexiones (como TEXT DESCRIPTION


ODBC), sigue siendo una buena práctica establecer este Probablemente esté pensando, ¿por qué está hablando
parámetro en *YES. De este modo, si el perfil obtiene del campo de texto? Lo estoy discutiendo porque, como
acceso a una línea de mandatos, los mandatos que se he trabajado con nuestros clientes, he visto demasiados
pueden ejecutar están limitados. campos de texto en blanco, campos con las iniciales DND
(do not delete) sin ninguna otra explicación, campos con
Configuro las cuentas de servicio, los perfiles de la palabra "test" pero que se utilizan para los procesos de
grupo y los perfiles que se usan para los trabajos por lotes producción y ofrecen generalmente descripciones poco
con LMTCPB (*YES) para que no se muestren en los útiles. Sea amable con los administradores que vienen
listado de informes de los perfiles de informes con acceso después de usted y ponga la mayor cantidad de descripción
a la línea de mandatos. (Cada vez que puedo establecer un en este campo que sea posible.
atributo que quita un perfil de un informe que es revisado
y cuestionado por un auditor, aprovecho esa configuración.) SUMMARY
No es como si otros parámetros de Perfil de Usuario
INITIAL PROGRAM, INITIAL MENU, AND no sean útiles. Por ejemplo, dos parámetros cercanos al
ATTENTION PROGRAM final de CRTUSRPRF y CHGUSRPRF permiten que el
Estos parámetros ayudan a configurar el entorno del perfil se establezca en status de *DISABLED en una
usuario. Primero se evalúa el programa inicial. Una vez fecha específica o en un período de tiempo específico
que el programa nombrado en este parámetro se realiza en (por ejemplo, en 31 días). Estos son útiles ya sea cuando
ejecución, se invoca el menú inicial. Para las cuentas de se sabe que un perfil es temporal o cuando un usuario se
servicio, establecí INLPGM en *NONE e INLMNU en retira, por ejemplo.
*SIGNOFF para evitar que el usuario/contraseña se
utilice mediante el inicio de sesión interactivo. El uso de estos atributos tomará medidas en el perfil
en lugar de tener que esperar al normal proceso de
También configuré el ATNPGM en *NONE para que envejecimiento de su perfil para deshabilitarlo. Sin
alguien no pueda entrar en el sistema iniciando sesión y embargo, algunos atributos tienen implicaciones de
presionando rápidamente la tecla de atención. Observe seguridad definitivas y necesitan atención especial.
que estos tres atributos son totalmente ignorados excepto Espero que este artículo le ayudará a centrarse y elegir la
cuando el perfil se utiliza para Sign on vía una sesión de mejor configuración para cada uno.
Telnet (emulación de 5250).

ATTITUDES Nº 282 13 Junio-Julio 2012


CONSULTING

PREGUNTA USUARIO IBMi:


Tengo problemas para usar algunas de las nuevas técnicas que aprendí en el RPG. A continuación se
muestra una captura de pantalla de un programa que estoy escribiendo. No puedo entender por qué al
compilador no le gusta. ¿Puede ver algo que esté causando que las declaraciones fallen?

RESPUESTA ATT:
Observo que usa un nombre de correlación en las cláu- La respuesta es esta: Sería poco realista para el precom-
sulas SELECT y WHERE, pero no define ese nombre de pilador de SQL, y por extensión el comprobador de sintaxis
correlación para ninguna de las tablas, así: RDi, incluir completamente la comprobación de sintaxis
RPG en un programa RPG con SQL incluído. Sólo pueden
SELECT x.onefield, x.twofield, x.redfield, x.bluefield hacer eso.
FROM MYTABLE
WHERE x.onefield = :TestValue; Entonces, ¿cómo se determina la causa de los mensajes
tan abstracts del precompilador SQL, especialmente
Luego añade el nombre de correlación a FROM, pero SQL0312 (variable &1 no definido o no utilizable) y
eso no resolve completamente el problema. Déjame mos- SQL5011 (matriz de estructura de host &1 no definido o no
trare más código y verá lo que debí haber visto. utilizable) cuando el error proviene de una violación de la
dcl-s TestValue dec(3); sintaxis RPG?

Tiene razón. El tipo de datos debe estar empaquetado, Una manera fácil es comentar las sentencias SQL y
no Dec. La razón por la que no lo vi es que Dec tiene senti- tratar de compilar el programa con un mandato que invo-
do para mí. Es fácil para alguien que trabaja en varios len- que el compilador RPG, como Create Bound RPG Program
guajes de programación leer código fuente sin ver estos (CRTBNDRPG). En lugar de comentar cada instrucción,
errores de sintaxis, y youtilizo *DEC en programas CL me gusta usar una directiva de compilador no definida.
todo el tiempo. Afortunadamente, uno de los compañeros
dcl-s RecCount dec(3);
de trabajo vio el error y la historia tuvo un final feliz. El
programa fue compilado y ejecutado correctamente.
*inlr = *on;
/if defined(xyz)
La pregunta que me hice es por qué el sistema no hizo
exec sql select count(*) into :RecCount
un mejor trabajo señalando un error tan simple. Si hubiera
from qiws.qcustcdt;
estado usando SEU para editar el código fuente, lo entende-
/endif
ría. SEU no entiende DCL-S — nunca lo ha hecho y nunca
return;
lo hará. Pero estaba usando RDi.
La lista del compilador RPG me muestra el problema.

1 dcl-s RecCount dec(3);


======> bbbbbbbb aaa
*RNF3308 20 a 000100 Keyword name is not valid; the
keyword is ignored.

Mientras estoy en el tema, permítanme compartir algu-


nas buenas noticias. IBM está mejorando la calidad de los
mensajes provenientes del precompilador SQL. Las mejo-
ras en las versiones 7.2 y 7.3 hacen que el precompilador
adjunte una descripción de motivo a los mensajes SQL0312
y SLQ5011. Para habilitar estas mejoras, instale un PTF.

7.2 SI67777
SI67615
7.3
En la siguiente versión, el motivo se incorporará al texto
del mensaje con un código de motivo.

ATTITUDES Nº 326 14 Marzo-Abril 2019