What you will be able to do
- Explain what Secure Data Sharing means for a consumer: no copy, read-only, compute-only cost
- Tell apart listings, direct shares, data exchanges, clean rooms and Internal Marketplace organizational listings
- Create a database from a share and grant IMPORTED PRIVILEGES on it
- Create your own tables and views that join imported data to your existing data
1.How Secure Data Sharing delivers enrichment data
Every Marketplace listing, private listing and organizational listing is delivered through the same mechanism: Secure Data Sharing. A provider creates a share, grants it access to selected objects (databases, tables, dynamic tables, secure views, UDFs and more), and adds consumer accounts. The consumer then creates a database from that share. That database is an imported database, and its access is managed with the same role-based access control as any other object.
No data moves between accounts. Sharing runs through Snowflake's services layer and metadata store, so imported data takes no consumer storage and access is near-instant. The only consumer cost is the virtual warehouse compute used to query it. Because the share points at the provider's live objects, new objects and updates to existing objects are immediately available to every consumer, and the provider can revoke access at any time. The trade-off is that all shared objects are read-only: you can't modify or delete them, and you can't add or change their data. Data can be offered in four ways, compared in the table below. One more account type is worth knowing: reader accounts, created by a provider for consumers who aren't Snowflake customers. A reader account can consume data only from the provider that created it, and it can't load data or run DML.
| Option | What the provider offers | Who receives it |
|---|---|---|
| Listing | A share plus additional metadata as a data product | One or more accounts (privately or on the Snowflake Marketplace) |
| Direct Share | Specific database objects (a share) | Another account in the provider's region |
| Data Exchange | A share offered to a group the provider sets up and manages | Members of that group of accounts |
| Clean room | Data, with control over which queries can be run against it | Collaborating accounts |
Checkpoint 1 of 8· Match them up
Match each sharing option to its description.
Tap a term, then the definition that fits it.
All four use shares. They differ in packaging (metadata or not), audience (one account, a managed group, or many) and query control.
“a Direct Share, in which you directly share specific database objects (a share) to another account in your region”Source: docs.snowflake.com
Checkpoint 2 of 8· Exam question
A team got the free Marketplace listing `WEATHER_SOURCE`, and Snowflake created the shared database `WEATHER_DB` in the account. Analysts using role `BI_ANALYST` get 'Database does not exist or not authorized' when they run `SELECT * FROM WEATHER_DB.PUBLIC.DAILY_FORECAST`. Which action gives the role access?
Correct answer: D — Run GRANT IMPORTED PRIVILEGES ON DATABASE WEATHER_DB TO ROLE BI_ANALYST to expose the shared objects to the role.
- A. Granting individual object privileges inside a database created from a share is not allowed. Snowflake rejects the statement and asks for IMPORTED PRIVILEGES instead.
- B. IMPORT SHARE controls who may create a database from a share, not who may query one that already exists. Analysts would still be blocked on WEATHER_DB.
- C. USAGE on the database and schema is the usual pattern for local databases, but a shared database accepts only the IMPORTED PRIVILEGES grant, so this statement fails.
- D. GRANT IMPORTED PRIVILEGES on the shared database gives the role access to the objects the provider shared. This is the documented way to let additional roles query a listing's data.
Sources1
2.The Internal Marketplace and organizational listings
Enrichment data doesn't always come from a third party. Often the most useful correlating data set belongs to another team in your company, such as a customer master owned by CRM or product data owned by supply chain. Snowflake's answer is the Internal Marketplace: a curated, secure space for sharing data inside your organization. Providers publish organizational listings to it, using Provider Studio in Snowsight or the API. Consumers can find internal data products without searching through externally shared listings on the public Marketplace. Access is controlled by account targeting and role-based access control, so only authorized users can reach the data. The goal is consistency: when teams draw on the same published data sets, there's less redundancy and fewer competing versions of the truth.
Checkpoint 3 of 8· Check yourself
What best distinguishes the Internal Marketplace from the Snowflake Marketplace?
The Internal Marketplace works like the public one but is visible only inside your organization. Providers manage organizational listings in Provider Studio in Snowsight or through the API.
“The Internal Marketplace is similar to the public Snowflake Marketplace, but it is exclusively for your organization.”Source: docs.snowflake.com
Organizational listings can also be queried directly. In government regions, for example, consumers can't search the Internal Marketplace in Snowsight. Instead they open the listing URL from the provider, or access the listing in SQL through its Uniform Listing Locator (ULL), as in the sample below. Auto-fulfillment, however, is triggered only when the listing is obtained through Snowsight, not through SQL.
SHOW AVAILABLE LISTINGS; SELECT * FROM <ull>.<schema>.<view>Sources2
3.Creating the imported database and granting access
When you select Get on a listing, Snowsight creates the imported database for you. A share received directly can be mounted in Snowsight (Data sharing » External sharing, Shared with you tab, Ready to Get section) or in SQL. Before you mount it, DESC SHARE lists the share's objects with a <DB> prefix, which means no database has been created from the share in your account yet. The SQL form is a CREATE DATABASE with a sharing-specific clause, where provider_account is the providing account and share_name is the share.
CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>Checkpoint 4 of 8· Fill the gap
Which keyword completes the consumer-side syntax for mounting a share?
CREATE DATABASE <name> FROM ? <provider_account>.<share_name>The sharing-specific form is CREATE DATABASE ... FROM SHARE, naming the provider account and the share.
Source: docs.snowflake.comA share can be consumed only once per account, so you create a single database from each share and give other roles access to it. Users get access to a share's objects when you grant the IMPORTED PRIVILEGES privilege on the imported database to their roles, either in Snowsight (Catalog » Explorer, Privileges) or with a GRANT ... TO ROLE statement. Not every role can make that grant: it must own the imported database or hold the global MANAGE GRANTS privilege.
Checkpoint 5 of 8· Check yourself
Which role can grant IMPORTED PRIVILEGES on an imported database to an analyst role?
Only the owner of the imported database (the role with OWNERSHIP on it) or a role with the global MANAGE GRANTS privilege can grant IMPORTED PRIVILEGES.
“Owns the imported database (that is, has the OWNERSHIP privilege on the database).”Source: docs.snowflake.com
Sources3
4.Creating tables and views over shared data
Imported objects are read-only, so you can't add a column to the provider's table or write your own data into it. Enrichment therefore happens in objects you create in your own database, which reference the imported one. A view is the lightest option. Its select_statement can be any valid SELECT over one or more source tables, including a join between your sales table and a shared weather table. The view always reflects the provider's latest updates, because it stores only the query. The syntax below shows the main view options. SECURE makes the view secure; by default a view is not. TEMPORARY limits the view to the session that created it. If you later want to share an enriched result onward, you can always create a new secure view before you create the outgoing share.
CREATE OR ALTER [ SECURE ] [ { [ { LOCAL | GLOBAL } ] TEMP | TEMPORARY | VOLATILE } ] [ RECURSIVE ] VIEW <name>
[ ( <column_list> ) ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
AS <select_statement>Checkpoint 6 of 8· Fill the gap
Which keyword in this syntax marks the view as secure (it is off by default)?
CREATE OR ALTER [ ? ] [ { [ { LOCAL | GLOBAL } ] TEMP | TEMPORARY | VOLATILE } ] [ RECURSIVE ] VIEW <name>SECURE specifies a secure view. Without it, the view is not secure.
Source: docs.snowflake.comWhen you need the enriched result stored, for example as a stable snapshot or to avoid repeating an expensive join, create a table. CREATE TABLE has several variants, and the one that fits enrichment is CREATE TABLE … AS SELECT (CTAS), which creates a table already populated with the result of a query. The other variants answer different needs, as the table below shows.
| Variant | What it creates |
|---|---|
| CREATE TABLE … AS SELECT (CTAS) | A populated table from a query |
| CREATE TABLE … LIKE | An empty copy of an existing table |
| CREATE TABLE … CLONE | A clone of an existing table |
| CREATE TABLE … USING TEMPLATE | A table with column definitions derived from staged files |
| CREATE OR ALTER TABLE | Creates the table if missing, or alters it to match the definition |
Checkpoint 7 of 8· Check yourself
You want a stored table holding your orders joined to a shared demographics table, built in one statement. Which CREATE TABLE variant fits?
CTAS creates a table populated by a query, and that query can be your join. LIKE creates an empty table, and imported tables are read-only, so you can't insert into them.
“CREATE TABLE … AS SELECT (creates a populated table; also referred to as CTAS)”Source: docs.snowflake.com
Checkpoint 8 of 8· Exam question
A retailer keeps `SALES.PUBLIC.ORDERS` in its own account and has mounted a Marketplace demographics database `DEMO_DB` that the provider refreshes weekly. Dashboards must always show the enrichment from the provider's latest refresh, and the team does not want to maintain any load job. What should the analyst build?
Correct answer: A — Create a local view joining `ORDERS` to the fully qualified `DEMO_DB` table, so each query reads the provider's current data.
- A. A local view that references the shared database always reads the data currently shared by the provider. No copy, task or pipeline is needed, so dashboards pick up each refresh automatically.
- B. A CTAS table is a point-in-time copy, so it goes stale between rebuilds and needs a scheduled task to keep it current. That is exactly the load job the team wants to avoid.
- C. Adding columns and populating them with MERGE creates a second copy of the demographics inside `ORDERS`. It needs a procedure to be rerun after every refresh, so it adds the maintenance the team wants to avoid.
- D. A shared database is read-only for consumers, so no views, tables or other objects can be created inside it. The view has to live in a local database.
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.After importing a shared table, you can add your own enrichment columns or rows to it.Why is that wrong?
Every object shared between accounts is read-only. Enrich by creating your own views or tables that reference the imported data.
2.Each team can create its own database from the same share in one account.Why is that wrong?
A share can be consumed only once per account. Create one imported database and grant IMPORTED PRIVILEGES on it to the roles that need it.
Covered in Creating the imported database and granting access
3.A view is secure by default, so it can be shared onward safely without the SECURE keyword.Why is that wrong?
Views aren't secure unless you specify SECURE. The documented default is a non-secure view.
Covered in Creating tables and views over shared data
Practise it for real
Find a free listing that correlates with your data, mount it, give an analyst role access, and expose the enriched result as a view.
1.Run SHOW AVAILABLE LISTINGS, then browse Marketplace » Snowflake Marketplace and check a candidate listing's data dictionary and Data Preview.
Why: You confirm that the listing has a column you can join on before you install it.
You should see: A free listing with a table that shares a key (such as a date or region) with one of your tables.
2.Using ACCOUNTADMIN or a role with CREATE DATABASE and IMPORT SHARE, select Get, set a database name and select Get again.
Why: Getting the listing creates the read-only imported database from the provider's share.
You should see: A new database in your account, plus an option to open a worksheet with an example query.
3.As the database owner, grant IMPORTED PRIVILEGES on the imported database to your analyst role (Catalog » Explorer, or a GRANT ... TO ROLE statement).
Why: Access to a share's objects is granted through IMPORTED PRIVILEGES, not through grants on individual objects.
You should see: The analyst role can query the imported tables.
4.In a database you own, run CREATE VIEW with an AS <select_statement> that joins your table to the imported table.
Why: Imported objects are read-only, so the enrichment has to live in an object you create.
You should see: A view that returns your rows plus the provider's columns and reflects the provider's updates.
Stuck? Get a nudge
If Get is replaced by Request, the listing isn't available in your region yet. Pick another listing, or request replication and wait.
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“The only charges to consumers are for the compute resources (i.e. virtual warehouses) used to query the imported data.”
↩︎ How Secure Data Sharing delivers enrichment data“Updates to existing objects in a share become immediately available to all consumers.”
↩︎ How Secure Data Sharing delivers enrichment data“All database objects shared between accounts are read-only (i.e. the objects cannot be modified or deleted, including adding or modifying table data).”
↩︎ Exam trap 1“Shared data does not take up any storage in a consumer account”
↩︎ Prediction“a Direct Share, in which you directly share specific database objects (a share) to another account in your region”
↩︎ Checkpoint - 2.https://docs.snowflake.com/en/user-guide/collaboration/listings/organizational/org-listing-aboutOfficial docs
“The Internal Marketplace lets users locate data products without having to browse through externally-shared listings in Snowflake Marketplace.”
↩︎ The Internal Marketplace and organizational listings“The Internal Marketplace is similar to the public Snowflake Marketplace, but it is exclusively for your organization.”
↩︎ Checkpoint - 3.
“by granting the IMPORTED PRIVILEGES privilege on an imported database to one or more roles in your account”
↩︎ Creating the imported database and granting access“you can always create a new secure view before you create another outgoing share.”
↩︎ Creating tables and views over shared data“A share can only be consumed once per account.”
↩︎ Exam trap 2“Owns the imported database (that is, has the OWNERSHIP privilege on the database).”
↩︎ Checkpoint - 4.
“Specifies the query used to create the view. Can be on one or more source tables or any other valid SELECT statement.”
↩︎ Creating tables and views over shared data“Default: No value (view is not secure)”
↩︎ Exam trap 3
Also cited
“CREATE TABLE … AS SELECT (creates a populated table; also referred to as CTAS)”
↩︎ Checkpoint