|
PCSOFT V28 Acces Natif Oracle ORA-24536 Column security is unknown for one or more columns. |
Débuté par Greg Coll, 20 nov. 2024 09:15 - 8 réponses |
| |
| | | |
|
| |
Posté le 20 novembre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 messages |
|
Posté le 20 novembre 2024 - 13:12 |
Petit add de l'auteur, la version du serveur Oracle est 19C. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 44 messages |
|
Posté le 20 novembre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 44 messages |
|
Posté le 20 novembre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 44 messages |
|
Posté le 20 novembre 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}) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 messages |
|
Posté le 20 novembre 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 fonctionneMessage modifié, 20 novembre 2024 - 16:47 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 44 messages |
|
Posté le 20 novembre 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}) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 messages |
|
Posté le 21 novembre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 183 messages |
|
Posté le 21 novembre 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 |
| |
| |
| | | |
|
| | | | |
| | |
|