Informix Error -353
-353 No table or view specified when granting/revoking privileges.
This statement specifies one of the table-level privileges (ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, and ALL) but does not specify the table to which the privilege applies. When you grant or revoke a database-level privilege (CONNECT, DBA, RESOURCE), you cannot name a table, but when you grant or revoke a table-level privilege you must name a table.
Oninit® Troubleshooting Guidance
Reasons / Common Causes
-353 fires on a GRANT/REVOKE statement using a table-level privilege (ALTER, DELETE,
INDEX, INSERT, SELECT, UPDATE, or ALL) without naming the table or view it applies to.
Database-level privileges (CONNECT, DBA, RESOURCE) are the exception — those genuinely
don't take a table name — so the distinction matters when writing the statement.
- A
GRANT/REVOKEfor a table-level privilege missing theON table_nameclause — the direct cause. - Confusing table-level and database-level privilege syntax — copying the shape of a
CONNECT/DBA/RESOURCEgrant (which has noONclause) and applying it to a table-level privilege by mistake. - A generated
GRANTstatement (from a script or migration tool) with a template that dropped the table name for some privileges but not others.
Solutions / Resolution
- Add the
ON table_name(or view name) clause, per the official guidance, whenever granting or revoking a table-level privilege. - Remember database-level privileges (
CONNECT,DBA,RESOURCE) never take a table name — don't add one there, and don't omit one for table-level privileges.
Examples
Missing table name on a table-level privilege
GRANT SELECT TO report_user;
-- -353: SELECT is a table-level privilege and needs an ON clause
Fix:
GRANT SELECT ON orders TO report_user;
Correctly omitting a table name for a database-level privilege
GRANT CONNECT TO report_user;
-- correct: CONNECT is database-level and never takes ON table_name
Diagnostic Checks
- Check whether the privilege being granted/revoked is table-level (
ALTER,DELETE,INDEX,INSERT,SELECT,UPDATE,ALL) or database-level (CONNECT,DBA,RESOURCE) — only the former requires anONclause.
Related Errors / Related Topics
- -298 — "Cannot grant permission to public with grant option." Another
GRANT-clause restriction in the same privilege-management family. - -299 — "Cannot grant permission to self." A related sibling in the same
GRANT-validation family.
Table-level privileges (ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, ALL) always
need an ON table_name clause; database-level privileges (CONNECT, DBA, RESOURCE) never do.