Manage Biscuits with SxT CLI
Instructions for using the CLI to generate biscuits for your tables.
These instructions detail managing authorization for your tables using the Space and Time CLI version 0.0.2. Space and Time uses biscuits for decentralized authorization. For more information on biscuits, see the Biscuit authorization page.
Note: you can run the help
command at any point to display information about the specified command. Example:
sxtcli help
Output:
Usage: <main class> [COMMAND]
Commands:
help Display help information about the specified command.
authenticate Perform platform authentication commands.
biscuit Perform biscuit commands.
discover Perform resource discovery commands.
sql Perform SQL commands.
sql-support Perform supporting SQL commands.
And for biscuit
:
sxtcli biscuit help
Usage: <main class> biscuit [COMMAND]
Perform biscuit commands.
Commands:
help Display help information about the specified command.
keypair Generate (or regenerate) a biscuit key pair.
generate Generate a biscuit.
Step 1: Generate key pair
Note: this keypair is entirely separate from the keypair you generated for yourself when you authenticated to Space and Time.
Think about it this way: you have your own keypair for authenticating, and your tables have thier own keypair for authorizing access. Just like with your own keypair, always keep your table's private key private and secure. You'll share the public key to authorize access.
Generating a new key pair to create biscuits for your tables is easy:
sxtcli biscuit keypair
Save your private key somewhere safe, like a password manager. You'll also need it for the next step.
Step 2: Generate a Biscuit
sxtcli biscuit generate help table
Usage: <main class> biscuit generate table
Generate a database table biscuit.
--operations=<_operations>[,<_operations>...]...
The set of desired SQL operations to include (multiple
values should be comma separated). Valid options:
[CREATE, ALTER, DROP, INSERT, UPDATE, MERGE, DELETE,
SELECT]
--privateKey=<_privateKey>
The private key (NOTE: does not leave your machine)
--readOnly Allow all read-only operations
--readWrite Allow all read-write operations
--resources=<_resources>[,<_resources>...]...
The set of desired tables to include (multiple values
should be comma separated)
To generate a biscuit for a table, you'll need your privateKey
from above, and the resourceId
you want to provide authorization too. ResourceId is simply the SCHEMA.TABLE
. Please note, you can specify a single resourceId or multiple comma-separated resourceIds, as seen below.
sxtcli biscuit generate table --privateKey=$b_priv_key --resources="<SCHEMA>.<TABLE_1>,<SCHEMA>.<TABLE_2>" --operations="SELECT,INSERT,UPDATE"
The command will return a biscuit!
EvQCCokCCgpjYXBhYmlsaXR5CgpkZGxfY3JlYXRlChVzZV90dXRf...
With that command, there is something important going on behind the scenes. The SxTCLI also embeds a series of capability facts into the biscuit token. For example, the following capabilities can be decoded from the token:
sxt:capability("dml_insert", "my_schema.my_table_1");
sxt:capability("dml_insert", "my_schema.my_table_2");
sxt:capability("dml_update", "my_schema.my_table_1");
sxt:capability("dml_update", "my_schema.my_table_2");
sxt:capability("dql_select", "my_schema.my_table_1");
sxt:capability("dql_select", "my_schema.my_table_2");
Save your biscuit. You will need it later for different interactions with your table(s) on SxT.
Step 3: Generate CREATE TABLE
statement
CREATE TABLE
statementThis step simply generates a sample SQL
CREATE TABLE
statement for you. It does not create a new resource in the Space and Time data warehouse.
sxtcli sql-support table-authz --accessType="PUBLIC_READ" --privateKey=$b_PRI_KEY --resourceId="MY_SCHEMA.MY_TABLE_1"
Biscuit: Eq8BCkUKDnN4dDpjYXBhYmlsaXR5CgpkZGx.....==
Table create DDL: CREATE TABLE MY_SCHEMA.MY_TABLE_1 (ID INT, NAME VARCHAR, PRIMARY KEY (ID)) WITH "public_key=D94F936D8431797F132C92B047F4F5AC0A47931A31FE8F8582F236FAFE0F53CD,access_type=public_read"
You can create a table with the configure resources DDL endpoint with query returned above.
Updated about 1 year ago