PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV (versões anteriores) → PCSOFT V28 Acces Natif Oracle ORA-24536 Column security is unknown for one or more columns.
PCSOFT V28 Acces Natif Oracle ORA-24536 Column security is unknown for one or more columns.
Iniciado por Greg Coll, nov., 20 2024 9:15 AM - 12 respostas
Publicado em novembro, 20 2024 - 9:15 AM
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
Membro registado
5 mensagems
Publicado em novembro, 20 2024 - 1:12 PM
Petit add de l'auteur, la version du serveur Oracle est 19C.
Membro registado
47 mensagems
Publicado em novembro, 20 2024 - 2:21 PM
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
Membro registado
47 mensagems
Publicado em novembro, 20 2024 - 2:51 PM
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
Membro registado
47 mensagems
Publicado em novembro, 20 2024 - 2:56 PM
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})
Membro registado
5 mensagems
Publicado em novembro, 20 2024 - 4:35 PM
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 fonctionne
Mensagem modificada, novembro, 20 2024 - 4:47 PM
Membro registado
47 mensagems
Publicado em novembro, 20 2024 - 6:10 PM
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})
Membro registado
5 mensagems
Publicado em novembro, 21 2024 - 7:49 AM
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
Membro registado
186 mensagems
Publicado em novembro, 21 2024 - 8:58 AM
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
Membro registado
5 mensagems
Publicado em novembro, 21 2024 - 12:49 PM
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.
Membro registado
186 mensagems
Publicado em novembro, 21 2024 - 2:33 PM
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

Fabrice
Mensagem modificada, novembro, 21 2024 - 2:38 PM
Membro registado
47 mensagems
Publicado em novembro, 21 2024 - 2:44 PM
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
Membro registado
5 mensagems
Publicado em novembro, 21 2024 - 9:08 PM
Hello Fabrice

Ha oui j’ ai tenté une dizaine de combinaisons possibles sur cette propriété..infosetendues.
Car pour moi le souci est bien la. Je reste ouvert tout de même aux propositions.
Et c’est bien cette propriété que je mentionne dans le premier post.

Oci_attr avec underscore, sans, sans oci_attr, avec set no column….1 0 True False
J’ai aussi joué avec alter session comme on le fait par exemple pour se placer dans un schéma, dans tous les sens, où tout du moins je le crois.

En tout cas Merci.
Mensagem modificada, novembro, 21 2024 - 9:22 PM