2016-11-09 4 views
-1

Ich habe SQL-Tabelle Table 01 genannt, und es verfügt über 3 Spalten als X, Y, ZSQL-Abfrage-Grenze mit nur einem Feld

Was ich die SELECT SQL Abfrage nur geben die Z Spaltendaten, wenn Anfrage beschränken müssen für X & Y

Gibt es Möglichkeiten zur Einschränkung der SQL SELECT query?

+0

Ich kann sowohl MySQL als auch Oracle haben –

+2

Beispieltabellendaten und das erwartete Ergebnis hinzufügen - auch formatierten Text. Zeigen Sie uns auch Ihren aktuellen Anfrageversuch. – jarlh

+0

Bitte bearbeiten Sie Ihre Frage, indem Sie einige Beispieldaten und das gewünschte Ergebnis hinzufügen. Außerdem, post, was Sie bisher versucht und die Probleme mit Ihrem Code – Aleksej

Antwort

0

Wenn Sie beschränken die SELECT-Abfrage für Z

SELECT X, Y 
FROM 
    Table01 

Wenn Sie die SELECT-Abfrage für x beschränken, y

SELECT Z 
FROM 
    Table01 
+0

nein ich muss die Einstellung nur auf Z, der Anforderer sollte nicht in der Lage, das Ergebnis für SELECT * Abfrage –

+0

ich habe meine Antwort aktualisiert haben.es Einschränkung auf Z und Requester kann nicht in der Lage, diese Spalte –

+0

zu sehen, wenn diese Abfrage Sie Problem nicht gelöst. Bitte geben Sie einige Demotabellendaten und Ihre akzeptierten Daten an. –

1

Sagen Sie eine Tabelle in Schema haben USER1 und Sie wollen ein anderes ermöglichen Benutzer, sagen Sie USER2, um nur nach Spalte z abzufragen; Sie können eine Ansicht auf Ihrem Tisch erstellen und geben nur die Zuschüsse für die Ansicht, ohne eine Zuteilung auf dem Tisch zu geben; Auf diese Weise werden USER2 nur die Spalten angezeigt, die in der Ansicht enthalten sind, und nicht die gesamte Tabelle.

Zum Beispiel

USER1:

create table completeTable(x number, y number, z number); 
create view restrictedTable as select z from completeTable; 
insert into completeTable values (1, 2, 3); 
grant select on restrictedTable to USER2; 
create public synonym restrictedTable for restrictedTable; 

USER2:

SQL> select x, y, z from completeTable; 
select x, y, z from completeTable 
        * 
ERROR at line 1: 
ORA-00942: table or view does not exist 


SQL> select x, y, z from restrictedTable; 
select x, y, z from restrictedTable 
      * 
ERROR at line 1: 
ORA-00904: "Y": invalid identifier 


SQL> select z from restrictedTable; 

     Z 
---------- 
     3 
+0

Aber ich muss das Ergebnis (Z) aus einer Where-Klausel von X und Y erhalten, wie kann ich das tun, zB SELECT Z von

wo X = '1' UND Y = '2' –

+0

Sie sagen Sie Möchten Sie eine Spalte "sehen", um einen Filter anzuwenden, aber Sie wollen nicht "sehen", um die Werte zu erhalten? Ich glaube, du kannst nicht – Aleksej

1

dies ist für MySQL

Sie benötigen eine gespeicherte Prozedur bauen mit x und y als Parameter, die die select z from t0 zurückkommt, und dann mit Benutzerrechten spielen Zugang zu verweigern x zu wählen, y von t0 und gewähren der Prozedur ausführen:

CREATE USER 'ReadOnlyUseruser'@'localhost' IDENTIFIED BY '' ; 
GRANT SELECT (z) ON MySchema.t0 TO 'ReadOnlyUseruser'@'localhost' ; 
GRANT EXECUTE ON MySchema.* TO 'ReadOnlyUseruser'@'localhost'; 

select x,y from t0 

Error Code: 1143. SELECT command denied to user 'ReadOnlyUseruser'@'localhost' for column 'x' in table 't0' 

aber select z from t0 wird
arbeiten jetzt, für die Filterteil:

DELIMITER $$ 

drop procedure `sp_t0`; 

CREATE DEFINER=`root`@'localhost' PROCEDURE `sp_t0`(
    in px int, 
    in py int 
) 
BEGIN 
    SELECT z FROM t0 
    where x=px and y=py; 
END 

schließlich nach der Anmeldung mit ReadOnlyUser

SET @x = 23; 
SET @y = 35; 
call sp_t0(@x,@y); 

Dies sollte den Trick

Verwandte Themen