> Tech > La Boîte à outils System iNews – Utiliser des valeurs hexadécimales en SQL

La Boîte à outils System iNews – Utiliser des valeurs hexadécimales en SQL

Tech - Par iTPro - Publié le 21 mars 2013
email

Toutes les réponses aux questions des administrateurs d'environnements IBM i.

Au sommaire de cette édition :

– Utiliser des valeurs hexadécimales en SQL
– Définir le répertoire par défaut FTP de l’IBM i, par utilisateur
– Empêcher les utilisateurs de supprimer des fichiers dans des dossiers IFS
– Se synchroniser avec un serveur d’heure public
– Spécifier un numéro de port pour l’acheminement du e-mail
– Sauvegarder et restaurer les autorités Object Private

Retrouvez toutes les Boîtes à Outils System iNews.

 

Utiliser des valeurs hexadécimales en SQL

Q. Je ne parviens pas à créer des requêtes SQL sur un fichier en utilisant PHP. Le fichier a un champ qui représente la clé et qui est défini comme un champ alphabétique contenant une valeur hexadécimale de 16 octets.

Pour lire les données en PHP, je dois recourir à la fonction HEX pour créer une représentation caractère des données :

$query = « SELECT IFSAUDF.*, HEX(KEY) as K FROM IFSAUDF WHERE SYS = ‘SRC' »;
J’utilise ceci pour former la clé d’un lien vers le fichier :
    echo(« <td><INPUT TYPE=button OnClick=window
    .open(\ »dspifsdets.php?key= »  .$rec[‘k’] . « \ »)
    VALUE=Display></td> »);

Il en résulte la requête URL suivante :

http://www2.ha4i.local/dspifsdets.php?key=000000000000000192609AA7000000…

J’essaie ensuite d’utiliser ces données pour examiner les enregistrements avec la même clé :

SELECT * FROM IFSAUDF where KEY=’000000000000000192609AA700000021′

Mais je n’obtiens aucun résultat, bien que la requête soit correctement formatée, parce que SQL interprète la clé comme 32 caractères alphabétiques au lieu de 16 octets hexadécimaux. Comment puis-je forcer la requête SQL à considérer la valeur de la clé comme une valeur hexadécimale et non comme une chaîne ?
R. SQL a une désignation de clé, HEX(Key), pour ce cas précis. En prenant votre exemple de valeur hexadécimale, vous coderiez l’instruction SELECT en utilisant cette clause where :

where HEX(Key) = ‘000000000000000192609AA700000021’.

—Scott Klement

Définir le répertoire par défaut FTP de l’IBM i, par utilisateur

Q. Le répertoire par défaut FTP IBM i peut-il être défini par utilisateur ? Je souhaite que certains utilisateurs démarrent leur session FTP dans un répertoire IFS particulier autre que le répertoire par défaut global normal.

R. Vous pouvez faire cela avec un programme de sortie FTP. Vérifiez le point de sortie  QIBM_QTMF_SERVER_REQ. IBM a des exemples de code pour ce point de sortie dans le Software Technical Document 16055109, “FTP Exit Program: Server Example” (tinyurl.com/ibmiftpexit).

—Tom Holden et Chris Hird

Empêcher les utilisateurs de supprimer des fichiers dans des dossiers IFS

Q. Actuellement, mes utilisateurs peuvent supprimer des fichiers dans des dossiers IFS. Comment puis-je les en empêcher ?

R. Quand vous publiez un share, vous pouvez préciser s’il est en lecture seule (il l’est par défaut.) Cela affecte l’accès au fichier par des points du réseau ou des lecteurs mappés. Mais les utilisateurs peuvent généralement supprimer les fichiers qu’ils possèdent, c’est-à-dire ceux qu’ils ont créés. Quiconque possède des droits object exist peut supprimer le fichier, sans pour autant pouvoir octroyer à autrui une autorité sur le fichier.

Si vos utilisateurs ne sont pas autorisés à supprimer le fichier alors qu’ils le peuvent, vous risquez des problèmes au moment où le fichier est créé : comme un fichier préexistant que le serveur FTP n’a pas pu supprimer et sur lequel il a donc redéfini les permissions. L’IFS ne respecte pas les paramètres d’autorité adoptée, bien qu’il honore *ALLOBJ. Je pense que si le fichier n’existe pas déjà (auquel cas, comme Replace fait autre chose que créer quelque chose de nouveau, l’IFS ne s’intéresse pas à la propriété), l’utilisateur créateur peut changer le propriétaire du fichier et les droits associés. L’utilisateur créateur est l’utilisateur courant, pas l’utilisateur du job, dans le cas où ils seraient différents.

—Lynne Noll, des System iNetwork Forums

Se synchroniser avec un serveur d’heure public

Q. Je participe à un service web avec création d’un tampon horodateur. Ce dernier ne doit pas s’écarter de plus de cinq minutes de l’heure UTC officielle. L’API CEEUTC convertira l’heure courante de mon IBM i en UTC. Si l’heure de mon i (sysval qtime) diffère trop de l’heure exacte, ça ne va pas. Existe-t-il un service web public fiable pour me donner l’heure exacte ?

R. Vous pouvez utiliser le client SNTP IBM i pour vous synchroniser à un serveur Windows Active Directory local et configurer celui-ci pour synchroniser son heure avec celle d’un serveur d’heure public à ntp.org. Ou bien, vous pouvez configurer le client SNTP IBM i pour qu’il contacte directement le serveur d’heure public … à vos risques et périls.

La commande pour la configuration de SNTP IBM i est la suivante :

CHGNTPA RMTSYS(‘0.pool.ntp.org’ ‘1.pool.ntp.org’ ‘2.pool.ntp.org’)
        AUTOSTART(*YES) POLLITV(720)

Et si vous voulez démarrer immédiatement (sans attendre la prochaine commande STRTCP ou IPL), vous pouvez taper :

STRTCPSVR *NTP

Le service pool.ntp.org renvoie de façon aléatoire les adresses IP pour les serveurs d’heure du monde entier, avec une qualité douteuse. Vous obtiendrez de meilleurs résultats avec les zones continentales (par exemple, north-america.pool.ntp.org ou asia.pool.ntp.org). Et encore meilleurs avec la zone du pays (comme us.ntp.org).

Pour toutes ces zones, vous pouvez utiliser les préfixes 0, 1, ou 2, comme 0.ch.pool.ntp.org.

Avec POLLITV(720), SNTP mettra à jour votre horloge système toutes les 12 hours (720 minutes = 12 heures) si votre horloge s’est écartée de la bonne heure. Vous pouvez changer ce paramètre pour vérifier plus ou moins souvent.

—JTaylor, EmmanuelW et Scott Klement

Spécifier un numéro de port pour l’acheminement du e-mail

Q. Nous voulons faire passer tout le e-mail de notre i par le service de messagerie d’entreprise. Pour recevoir ces messages, les responsables du service mettent en oeuvre un numéro de port non standard que nous devons utiliser. Je ne trouve rien qui me dise si je peux spécifier un numéro de port pour le paramètre MAILROUTER de CHGSMTPA. Y a-t-il un moyen ?

R. J’ai répondu à ma propre question. L’IBM Document 23903419, “Binding the OS/400 SMTP Server to a Different Port” (http://tinyurl.com/os400smtpport), explique comment lier le serveur  SMTP IBM OS/400 ou IBM i5/OS SMTP à un port différent en utilisant les commandes WRKSRVTBLE et ADDSRVTBLE.

—Peter Udesen

Sauvegarder et restaurer les autorités Object Private

Lors de la restauration d’une bibliothèque de production en un système de test ou de sauvegarde, combien de fois avez-vous eu la surprise de constater que les autorités du système de test et celles du système de production ne correspondaient pas ?
Je ne compte plus le nombre de fois où un client m’a appelé pour essayer de comprendre pourquoi les autorités n’étaient pas homogènes entre les deux systèmes. C’est vrai, il n’est pas facile de restaurer des objets d’un système sur un autre en essayant de garder intacts les attributs de sécurité et les autorités. De nombreuses règles entrent en jeu, selon la façon dont les objets sont sauvegardés et restaurés.

Dans la version 5.4, IBM a amélioré les commandes Save(SAVxxx) et Restore(RSTxxx) pour obtenir plus facilement les bonnes autorités sur les objets restaurés. Vous devrez quand même connaître les règles et restrictions concernant la sauvegarde et la restauration des objets, mais ces améliorations élimineront beaucoup de difficultés de restauration.

Avant d’approfondir les améliorations de la 5.4, voyons un exemple qui montre comment les opérations  save/restore interagissent avec les autorités object private.
Les seules autorités objet qui sont sauvegardées et restaurées avec un objet, sont : l’autorité du propriétaire de l’objet, l’autorité *PUBLIC, et le groupe object primary. Elles sont stockées dans l’objet et donc sauvegardées avec lui. Cependant, la totalité des autorités privées d’un objet ne sont pas stockées dans celui-ci, mais dans les profils des utilisateurs qui ont une autorité privée sur un objet.

Avant les améliorations de la 5.4, ces autorités object private n’étaient sauvegardées que quand les profils utilisateur l’étaient, avec les commandes Save Security Data (SAVSECDTA) ou Save System (SAVSYS).

La figure 1 (voir Club Abonné) montre les autorités objet d’un fichier nommé PAYFILE. Ce dernier appartient à PAYOWNER, qui a l’autorité *ALL sur le fichier. Le fichier a l’autorité *PUBLIC *EXCLUDE. Aucun primary group ne lui est attribué. Ces trois autorités sont stockées à l’intérieur de l’objet et seront sauvegardées avec lui. Mais les autorités privées de GROUP_PAY et GROUP_ACT ne sont pas stockées dans l’objet et donc ne seront pas sauvegardées avec lui. L’autorité *CHANGE pour GROUP_PAY est stockée dans le profil utilisateur GROUP_PAY ; l’autorité  *USE pour GROUP_ACT est de la même manière stockée dans le profil utilisateur  GROUP_ACT.

Les autorités privées comme celles-là ne sont sauvegardées que par une commande SAVSECDTA ou SAVSYS. Toutes deux sauvegardent, entre autres choses, vos profils utilisateur, y compris les éventuelles autorités privées, qui sont stockés à l’intérieur des profils. Pour restaurer des autorités object private sur un autre système, deux étapes sont nécessaires. Premièrement, vous devez restaurer les profils utilisateur. La commande Restore User Profile (RSTUSRPRF) est là pour ça. Une fois cette restauration effectuée, la commande Restore Authority (RSTAUT) permettra de restaurer sur les objets les autorités privées des profils utilisateur sélectionnés.
Dans cet exemple, si nous voulons seulement restaurer des autorités privées détenues par GROUP_PAY et GROUP_ACT, nous exécuterons les commandes suivantes :

RSTUSRPRF …  USRPRF(GROUP_PAY  GROUP_ACT)  SECDTA(*PVTAUT)
RSTAUT  USRPRF(GROUP_PAY  GROUP_ACT)

Dans la version 5.4, IBM a associé le paramètre Private Authority (PVTAUT) aux commandes Save et Restore. La valeur du paramètre PVTAUT déterminera si les autorités privées seront sauvegardées et/ou restaurées avec les objets.
Cette nouvelle possibilité facilitera considérablement le déplacement d’objets d’un système sur un autre, tout en gardant les autorités privées intactes. Bien sûr, vous êtes encore soumis aux règles et restrictions des opérations Save et Restore, mais grâce à PVTAUT de la 5.4, vous n’aurez plus besoin de sauvegarder et restaurer les profils utilisateur, ni d’effectuer l’opération  RSTAUT pour synchroniser vos autorités privées pour certains objets.

Ainsi, lors de la sauvegarde et de la restauration de notre exemple PAYFILE, les autorités privées peuvent être sauvegardées et restaurées avec l’objet PAYFILE :

SAVOBJ OBJ(PAYFILE) LIB(PAYLIB) . . .   PVTAUT(*YES)

RSTOBJ OBJ(PAYFILE) SAVLIB(PAYLIB)   . . .  PVTAUT(*YES) 

La valeur par défaut PVTAUT sur toutes les commandes Save et Restore est *NO. Donc, si vous voulez que les autorités privées soient sauvegardées et restaurées avec les objets, il vous faudra spécifier PVTAUT(*YES).

Pour restaurer les autorités privées à l’aide d’une commande RSTxxx avec PVTAUT(*YES), il vous faudra d’abord un média de sauvegarde créé avec SAVxxx . . . PVTAUT(*YES).

PVTAUT est très utile pour déplacer des bibliothèques et des objets d’un système sur un autre. Mais il n’est pas recommandé pour des opérations de sauvegarde massive comme SAVLIB *NONSYS ou SAVLIB *ALLUSR.

Dans un scénario de reprise, quand il faut récupérer un système ou installer une copie d’un système existant à des fins de sauvegarde ou de test, vous procéderez ainsi : restauration des profils utilisateur, restauration des bibliothèques en spécifiant PVTAUT(*NO), puis restauration des autorités privées avec la commande RSTAUT.

—Dan Riehl

Téléchargez gratuitement cette ressource

Protection des Données : 10 Best Practices

Protection des Données : 10 Best Practices

Le TOP 10 des meilleures pratiques, processus et solutions de sécurité pour mettre en œuvre une protection efficace des données et limiter au maximum les répercutions d’une violation de données.

Tech - Par iTPro - Publié le 21 mars 2013