[
http://tracker.firebirdsql.org/browse/CORE-6114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sean Leyne reopened CORE-6114:
------------------------------
> isc_open_blob2 fails when selecting blob field from view with "no permission
> for SELECT access to TABLE X" error.
> -----------------------------------------------------------------------------------------------------------------
>
> Key: CORE-6114
> URL: http://tracker.firebirdsql.org/browse/CORE-6114
> Project: Firebird Core
> Issue Type: Bug
> Components: Security
> Affects Versions: 3.0.4, 3.0.5
> Environment: Window 10 Pro
> Reporter: Andrew Ayre
> Assignee: Dmitriy Starodubov
> Attachments: CreateDb.sql
>
>
> Error occurs in Firebird 3.0.4 and daily snapshot 3.0.5.33160.
> Error "no permission for SELECT access to TABLE BLOB_TABLE"
> When attempting to select BLOB from VIEW that DOES have has permission to
> select from BLOB_TABLE.
> Reproduce as follows:
> Create a test database containing a single table (BLOB_TABLE), single view
> (BLOB_VIEW) with grants that allow public to only to the view.
> Grant all on BLOB_TABLE to VIEW BLOB_VIEW.
> Use SQL the following script to create test database below:
> --=== Start Script ===--
> CREATE TABLE BLOB_TABLE (
> ID INTEGER NOT NULL,
> TEXT_VALUE VARCHAR(50),
> BLOB_VALUE BLOB SUB_TYPE 1 SEGMENT SIZE 80,
> BLOB_BINARY BLOB SUB_TYPE 0 SEGMENT SIZE 80
> );
> COMMIT;
> CREATE VIEW BLOB_VIEW(
> ID,
> TEXT_VALUE,
> BLOB_VALUE,
> BLOB_BINARY)
> AS
> SELECT ID, TEXT_VALUE, BLOB_VALUE, BLOB_BINARY FROM BLOB_TABLE;
> COMMIT;
> ALTER TABLE BLOB_TABLE ADD CONSTRAINT PK_BLOB_TABLE PRIMARY KEY (ID);
> COMMIT;
> SET TERM ^ ;
> CREATE OR ALTER TRIGGER BIUD_BLOB_VIEW FOR BLOB_VIEW
> ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
> AS
> BEGIN
> if (INSERTING) then
> begin
> INSERT INTO BLOB_TABLE(
> ID,
> TEXT_VALUE,
> BLOB_VALUE,
> BLOB_BINARY)
> values (
> new.ID,
> new.TEXT_VALUE,
> new.BLOB_VALUE,
> new.BLOB_BINARY);
> end
> if (UPDATING) then
> begin
> UPDATE BLOB_TABLE SET
> TEXT_VALUE = new.TEXT_VALUE,
> BLOB_VALUE = new.BLOB_VALUE,
> BLOB_BINARY = new.BLOB_BINARY
> WHERE
> ID = old.ID;
> end
> if (DELETING) then
> delete from BLOB_TABLE
> WHERE
> ID = old.ID;
> END^
> COMMIT^
> SET TERM ; ^
> GRANT ALL ON BLOB_VIEW TO PUBLIC;
> GRANT ALL ON BLOB_TABLE TO TRIGGER BIUD_BLOB_VIEW;
> COMMIT;
> INSERT INTO BLOB_TABLE (ID, TEXT_VALUE, BLOB_VALUE) VALUES (1, 'test data',
> x'414243');
> COMMIT;
> --=== End Script ===--
> We are moving to Firebird 3 from Firebird 2.5.8. which does NOT have this bug.
> Our Delphi application uses IBO 4.8.7 to access the Firebird database.
> We have also tested using newer version of IBO (Ver 5.9.7) with the same
> result.
> Tracing the Firebird API calls from IBO we can see the following pattern.
> isc_attach_database(db: 1)
> isc_dsql_allocate_statement(st: 1)
> isc_start_multiple(tr: 1)
> isc_dsql_prepare(tr: 1, st: 1)
> isc_dsql_execute(tr: 1, st: 1)
> isc_dsql_fetch(st: 1)
> isc_commit_transaction(tr: 1)
> isc_start_multiple(tr: 2)
> isc_open_blob2(tr: 2, blob:ID)
> A simpler pattern that produces the same error is below. In the following
> steps it is assumed that we know the ID of the BLOB to be opened.
> We have further narrowed the error down as follows:
> isc_attach_database(db: 1)
> isc_start_multiple(tr: 1)
> isc_open_blob2(tr: 1, blob:ID)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel