Grant & revoke access
Grant or revoke access to table writes using SQL statements.
Tableland allows for some SQL-based access control, along with smart contracts controllers. Developers can provision access to certain addresses using the GRANT
or REVOKE
keywords, which defines high-level write permissions. Only the owner can write this access control query.
Usage
To grant permissions for all table mutation abilities, you can make a write query that follows the general format below. Namely, you set the rules for INSERT
, UPDATE
, or DELETE
permissions on a specific table to a specific onchain address. Keep in mind the 0x
address should be treated as a TEXT
value and wrapped in single quotes, and the examples below show 0xYOUR_EVM_ADDRESS
but be sure to update this accordingly with the correct EVM address.
- GRANT
- REVOKE
GRANT
INSERT,
UPDATE,
DELETE
ON my_table
TO '0xYOUR_EVM_ADDRESS'
REVOKE
INSERT,
UPDATE,
DELETE
ON my_table
TO '0xYOUR_EVM_ADDRESS'
The primary difference between the keywords is the following:
GRANT
: Allows the caller to grant an address permissions on a table.REVOKE
: Removes any of the privileges that were enabled for an address by way ofGRANT
.
At this time, the most robust features are only available at the smart contract level.
Example statements
To GRANT
permissions for all table mutation abilities, you can execute a query that defines all write possibilities to an address.
GRANT
INSERT,
UPDATE,
DELETE
ON
my_table
TO
'0xYOUR_EVM_ADDRESS';
Perhaps at a point in the future, you decide to REVOKE
the permission to DELETE
rows via another access control write query:
REVOKE
DELETE
ON
my_table
FROM
'0xYOUR_EVM_ADDRESS';
For more information on GRANT
and REVOKE
, see the SQL specification.
Precedence
At a lower level, it's possible to set a custom controller using a smart contract. Once a smart contract controller has been configured for a table, it takes precedence over any GRANT
or REVOKE
statements. If that smart contract controller is ever removed and set back to its initial value ("unsetting" to the 0x0
address), the GRANT
and REVOKE
statements go back into effect. Again, what's described here with controllers and setting/unsetting is only possible at the smart contract level and does not happen with pure SQL.