|
PCSOFT V28 Acces Natif Oracle ORA-24536 Column security is unknown for one or more columns. |
Iniciado por Greg Coll, 20,nov. 2024 09:15 - 11 respuestas |
| |
| | | |
|
| |
Publicado el 20,noviembre 2024 - 09:15 |
Bonjour, Je vais parler d'oracle et son acces natif, je suis en V28 Windev et Webdev.
L'entreprise pour laquelle je travaille me tiens a disposition des vues, et bien sur certaines colonnes des tables originales sont traitees par RAS (Oracle Database Real Application Security). Ce qui fait que pour un certain user certaines colonnes seront a Null et pour d'autres elles seront visibles avec des Data.
J'utilise Oracle SQL Developper ou SQL+ pour browser/fetcher cette vue, pas de souci je vois biens ces fameuses colonnes avec leur Data. Couche client Oracle InstantClient dernière versions en 32 et 64 bits (23 et 21 de tete)
Je passe a PCSoft : Avec le meme, user, droit, serveur etc, la connexion se passe correctement Houvreconnexion OK
si houvreconnexion(Connexion_Test) SD est une source de donnees hexecuterequetesql(sd, Connexion_Test,hrequetesanscorrection, "Select * from mavue") (ou hexecuterequete pour une requete stockee) Fonctionne, pas de retour d'erreur, mais a ce niveau je n'ai pas parcouru un seul Record de Ma vue A la premiere instruction Hlitpremier(SD) ou hnbenr(SD) qui va produire un parcours de record, je recois une erreur Oracle ORA-24536 Warning Column security is unknown for one or more columns.
Coder erreur 73001 et je me fais jeter bien sur.
Oui il y a de la securité sur certaines colonnes de cette vue, mais pourquoi SQL DEV me les affiche ainsi que SQL+ et que l'acces Natif PCSOFT lui refuse ?
Quelqu' un a t il deja rencontré ce problème ?
PS J'ai tenté avec la propriété OCI_ATTR_NO_Column_Auth_Warning dans la propriété ..infosEtendues de ma connexion, sans succes.
Cordialement Greg |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
Publicado el 20,noviembre 2024 - 13:12 |
Petit add de l'auteur, la version du serveur Oracle est 19C. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 45 mensajes |
|
Publicado el 20,noviembre 2024 - 14:21 |
Bonjour
Je vois votre problème, voilà ce qui s'est passé, votre requête SQL n'a pas les rubriques | les champs
1. Vous avez créer plusieurs colonnes dans un outil modèle 'table' 2. Vous avez écrit une requête 'Select * from fichier', ensuite vous avez affecter les champs dans chaque colonnes de l'outil 'table'
Pour le cas 1, vous devrez compter le nombre de colonne dans l'outil modèle 'table' Pour le cas 2, vous devrez écrire tous les rubriques | tous les champs dans la requête SQL
Pour les deux, vous devrez égaliser le nombre de colonne et le nombre de rubrique de la requête SQL Exemple : 'Select nom, prénom, civilité, adresse from fic_collaborateur'
NB : Vous devrez affecter les rubriques dans chaque colonne de l'outil table spécifier NB : Dans Oracle Database, vous ne devrez pas écrire des requête SQL 'Select * from Fichier' NB : Normalement si HOuvreConnexion() est bon alors vous avez la possibilité de récupérer les Data dans Oracle Database
Cordialement Mr.RATSIMANDRESY Niry Aina Eddy |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 45 mensajes |
|
Publicado el 20,noviembre 2024 - 14:51 |
Je vois que la requête SQL retourne aucune ligne de Data
Vous devrez exécuter la requête SQL 'Select Colone_3 from mavue' dans Oracle Database | dans un éditeur SQL | dans un Navicat SQL | ...
1. Soit 'Select Colone_3 from mavue' retourne aucune ligne de Data 2. Soit vous devrez écrire le code suivante :
Pour le cas 1, en mode teste de la base de donnée Oracle Database, essayer d'ajouter des Data dans le fichier pour le cas 2, exécuter le code après avoir remplir les Data
NB : Attention de toucher à l'Oracle Database en mode production
Cordialement Mr.RATSIMANDRESY Niry Aina Eddy |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 45 mensajes |
|
Publicado el 20,noviembre 2024 - 14:56 |
LOCAL sString is string sdDonnées is Source dede Données sString = "Select Colone_3 from mavue" IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN Erreur(ErreurInfo(errComplet)) ELSE HLitPremier(sdDonnées) TANTQUE NOT HEnDehors(sdDonnées) TableAjouteLigne({"TABLE_MAVUE", indChamp}, sdDonnées.Colone_3) HLitSuivant(sdDonnées) FIN END TableSelectMoins({"TABLE_MAVUE", indChamp}) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
Publicado el 20,noviembre 2024 - 16:35 |
Bonjour Eddy et à nouveau Merci.
Il me semblait avoir répondu mais je ne retrouve plus ce Post. Donc je vais peut-être doublonné. J'attaque la vue, mettons que la vue a 5 colonnes par exemple, seule la colonne 3 que j'appellerai Colonne_3 est securisee RAS. La table derrière a des données, le vue aussi, un select dans SQL+ ou SQL Dev d'Oracle sur la vue me montre bien des data sur tous les records de toutes les colonnes.
Maintenant dans Webdev ou Windev 28 donc : un Select Colonne_1 from ma vue fonctionne, ainsi que le parcours, hlitpremier, hnbenr etc un Select Colonne_2 from ma vue fonctionne, ainsi que le parcours, hlitpremier, hnbenr etc un Select Colonne_1, Colonne_2 from ma vue fonctionne, ainsi que le parcours, hlitpremier, hnbenr etc
un Select Colonne_3 from ma vue fonctionne (dans le sens hexecuterequetesql), mais pas le parcours, hlitpremier, hnbenr etc plante->ORA-24536
Tout select contenant la colonne_3 comme un ‘select *’ fera planter.
Si je reprends votre exemple :
sString = "Select Colone_3 from mavue" IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN //Ca ca fonctionne Erreur(ErreurInfo(errComplet)) ELSE HLitPremier(sdDonnées)//->Erreur ORA-24536
sString = "Select Colone_1 from mavue" IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN //Ca ca fonctionne Erreur(ErreurInfo(errComplet)) ELSE HLitPremier(sdDonnées)//->Pas d'erreur, ca fonctionneMensaje modificado, 20,noviembre 2024 - 16:47 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 45 mensajes |
|
Publicado el 20,noviembre 2024 - 18:10 |
L'éditeur de code du forum a un bug, voilà le code original
LOCAL sString is string sdDonnées is Source de Données sString = "Select Colone_3 from mavue" IF HExécuteRequêteSQL(sdDonnées, "cnConnexion_Oracle", hRequêteSansCorrection, sString) = False THEN Erreur(ErreurInfo(errComplet)) ELSE HLitPremier(sdDonnées) TANTQUE NOT HEnDehors(sdDonnées) TableAjouteLigne({"TABLE_MAVUE", indChamp}, sdDonnées.Colone_3) HLitSuivant(sdDonnées) FIN END TableSelectMoins({"TABLE_MAVUE", indChamp}) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
Publicado el 21,noviembre 2024 - 07:49 |
Bonjour Eddy,
Le probleme n'est pas un souci de syntaxe sur un fin de boucle, pas de souci de ce coté. Je dirais plus tot un souci dans l'acces Natif, mais je souhaite le retour de personnes ayant deja eu ce symptome avec ce message d'erreur specifique.
Cordialement |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 185 mensajes |
|
Publicado el 21,noviembre 2024 - 08:58 |
Bonjour, Je n'utilise pas l'accès natif Oracle mais celui de MySQL Cependant, il m'est arrivé d'utiliser la fonction HListeRubrique() sur des bases tiers afin d'identifier certaines colonnes "indésirables" (colonnes cryptées par ex) Cette fonction permettrait "peut être" dans une première phase d'identifier les colonnes accessibles (ou non) puis ensuite, dans une deuxième phase, de refaire un SELECT en éliminant celles qui posent problème. Certes, c'est un peu lourd et purement théorique car (encore une fois) je n'utilise pas l'accès natif Oracle, mais si ça peut dépanner Cdt Fabrice |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4 mensajes |
|
Publicado el 21,noviembre 2024 - 12:49 |
Bonjour Fabrice,
Merci d'essayer de m'aider.
Les colonnes sont bien bien identifiees, l'analyse remonte bien toutes les colonnes ainsi que leurs types respectifs. Dans le cas d'un Hexecuterequete. Un Hlisterubrique fonctionne, pas de souci. C'est bien lors du Fetch des Data de cette colonne que ca plante. C'est bien la logique voulue par RAS. Un meme user avec un outil SQL+ ou Oracle SQL Dev, voit bien ces data dans cette colonne. C'est bien uniquement l'acces natif qui plante lors du fetch. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 185 mensajes |
|
Publicado el 21,noviembre 2024 - 14:33 |
Re-bonjour,
As-tu essayé la propriété ..infosEtendues="NOCOLUMNAUTHWARNING=1" (sans OCI_ATTR devant le paramètre et sans les underscores) car je viens de voir ceci dans la documentation de Windev : - PREFETCHMEMORY correspond au paramètre OCI_ATTR_PREFETCH_MEMORY de OCI_HTYPE_STMT - PREFETCHROW correspond au paramètre OCI_ATTR_PREFETCH_ROWS de OCI_HTYPE_STMT https://doc.pcsoft.fr/?9000124&name=informations_optionnelles_connexion Avec un peu de bol
Sinon, existerait-il une requête SQL permettant de modifier les paramètres de la session ? ex: ALTER SESSION SET NO_COLUMN_AUTH_WARNING=1
FabriceMensaje modificado, 21,noviembre 2024 - 14:38 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 45 mensajes |
|
Publicado el 21,noviembre 2024 - 14:44 |
Bonjour
J'ai une idée pour vous, c'est un peu long mais c'est efficace, la solution est d'utiliser un requête SQL intégrer pareil dans l'Oracle Database Voilà les étapes dont vous devrez suivre
1. étape : Créer un requête intégrer pareil comme dans l'Oracle Database 2. étape : Ajouter la requête intégrer dans la description de la fenêtre 3. étape : Dans la description de l'outil table, vous devrez ajouter chaque rubrique dans chaque colonne du table Colone_1 -> Rubrique_1 | Colone_2 -> Rubrique_2 | Colone_3 -> Rubruque_3 | ... 4. étape : Dans l'initialisation de la fenêtre, exécuter le code suivante :
sRequete_Intégrer is string = "Select Colone_1, Colone_2, Colone_3 from mavue" // EDD (11/24) : A créer dans le projet IF HExécuteRequêteSQL(sRequete_Intégrer, "cnConnexion_Oracle", hRequêteSansCorrection) = False THEN Erreur(ErreurInfo(errComplet)) END
NB : Essayez d'exécuter la requête intégrer dans l'éditeur SQL, vous pouvez tirer un résultat sur l'accès natif après
Cordialement Mr.RATSIMANDRESY Niry Aina Eddy |
| |
| |
| | | |
|
| | | | |
| | |
|