What you will be able to do
- Name the privileges a consumer role needs to install an app from a listing, and the privileges a provider role needs to install from an application package
- Walk through installing an app from a Snowflake Marketplace listing and from a private listing
- Explain how an app gets privileges and object access at install time: auto-granted privileges, the Permission SDK, manual grants and references
- Install additional instances of an app and know when that option is unavailable
- Diagnose common installation blockers
Key concept
Installation creates an APPLICATION object, but the app still needs configuring — Installing a Native App creates an APPLICATION object in the consumer account and runs the setup script. The app is not fully usable until the consumer approves its requests and grants it access to anything outside its own boundary.
1.Check privileges before anyone clicks Get
Every installation runs CREATE APPLICATION, so the role that does the install needs the privileges for that command. On the consumer side, the role must be ACCOUNTADMIN or another role that holds both IMPORT SHARE and CREATE APPLICATION. A paid listing adds one more requirement: the role also needs PURCHASE DATA EXCHANGE LISTING, and the account has to meet some additional criteria. Plan this before the install starts, because a role that is missing a privilege stops the flow before any app object exists.
Providers also install apps, either to test them or to run them in their own account. They don't install from a listing. They create the app directly from the application package in the same account. For that, the role needs the account-level CREATE APPLICATION privilege plus the object-level INSTALL privilege on the package. The role that created the package can already do this by default. If other roles need to build and test apps from the package, grant them the DEVELOP privilege on it.
The provider account has its own prerequisites for a consumer install to work. A consumer can only install after the provider has published a listing that contains the application package as its data product, and that listing can be a Snowflake Marketplace listing or a private listing. Before an app is shared with consumers outside the provider's organization, it must pass an automated security scan. If the provider wants the events a consumer shares, the provider also needs an event account with an active event table in the region where the app is installed. Without one, the shared events from that region are dropped, although the consumer's own event table still captures them locally.
GRANT CREATE APPLICATION ON ACCOUNT TO ROLE provider_role;
GRANT INSTALL ON APPLICATION PACKAGE hello_snowflake_package
TO ROLE provider_role;Checkpoint 1 of 7· Check yourself
A consumer's custom role holds CREATE APPLICATION and wants to install a free app from a listing. What else does that role need?
Installing from a listing needs IMPORT SHARE and CREATE APPLICATION, or ACCOUNTADMIN. INSTALL on the package is the provider-side privilege for local installs, and PURCHASE DATA EXCHANGE LISTING is needed only for paid apps.
“To access a listing, you must use the ACCOUNTADMIN role or another role with the IMPORT SHARE and CREATE APPLICATION privileges.”Source: docs.snowflake.com
2.Installing from a listing compared with installing from a package
Consumers install from a listing, and the Snowflake Marketplace is the main way to find one. Some providers share private listings directly with specific accounts instead. The install steps are the same either way. The difference is that a private listing may not have been through the same Marketplace-level review as a public one, so the consumer should evaluate it with equal care.
In Snowsight, Marketplace listings are under Marketplace » Snowflake Marketplace. Private listings appear under Catalog » Apps, in Recently shared with you. In both flows, the consumer reviews the app's security requests before installing. These cover account-level privileges, privileges on objects, role grants for the SNOWFLAKE database, and events and logs. A monetized app shows Buy where a free app shows Get. If a provider publishes more than one version, the consumer can choose a release channel. Default is the reviewed production version. Alpha builds may not have passed the security review. QA builds have not been reviewed or tested at all.
Checkpoint 2 of 7· Put it in order
Put the Snowflake Marketplace installation steps in order.
- 1.Go to Marketplace » Snowflake Marketplace and find the listing
- 2.Select Get to access the listing
- 3.Optionally enter an Application name, then select Get
- 4.Select the warehouse to use for installing the app
- 5.Select the listing and review its privileges and logging requests
Following the documented Marketplace flow, the consumer reviews the security requests first. Then they select Get, choose the warehouse, optionally name the app, and select Get again to install.
“Select the listing, then view the privileges and logging requests for the app”Source: docs.snowflake.com
Cross-account installs are how providers test the real consumer experience. A provider creates a private listing, shares it with another account in their organization, signs in to that account, and runs the consumer install steps there. An install from the application package always happens in the same account as the package, so it can't show you what a consumer in a different account will see.
Checkpoint 3 of 7· Exam question
Before a consumer role (other than ACCOUNTADMIN) can install a Snowflake Native App from a Marketplace listing, which pair of privileges must that role hold?
Correct answer: A — IMPORT SHARE, CREATE DATABASE
- A. IMPORT SHARE lets the role access the underlying Marketplace share, and CREATE DATABASE lets it create the application object; together these are the minimum privileges required to install from a listing.
- B. CREATE SHARE and CREATE WAREHOUSE are provider-side or compute-management privileges and are not what a consumer role needs to access and install a listing.
- C. MANAGE GRANTS and CREATE ACCOUNT are broad administrative privileges unrelated to accessing a Marketplace listing or creating an application object.
- D. CREATE APPLICATION alone does not grant access to the listing's underlying share, and USAGE is an object-level privilege, not what governs installing from a listing.
3.How the app gets privileges and object access during installation
A simple app creates everything it needs inside its APPLICATION object when the setup script runs, and the consumer doesn't have to grant anything. More complex apps need to create objects, or reach objects, outside that boundary. The framework provides several ways to handle this.
At install time the app shows its Category 1 privilege requests, which are the operational resources it needs to create. If the consumer agrees and continues, those privileges are granted automatically. Apps that set manifest_version: 2 use automated granting of privileges. By installing such an app, the consumer also agrees that these privileges can be granted during later upgrades without asking again. Consumers who want to limit what an app can create can use feature policies.
The privileges that automated granting supports are EXECUTE TASK, EXECUTE MANAGED TASK, CREATE WAREHOUSE, CREATE COMPUTE POOL, BIND SERVICE ENDPOINT, CREATE DATABASE, CREATE EXTERNAL ACCESS INTEGRATION, CREATE SECURITY INTEGRATION, CREATE SHARE and CREATE LISTING. Some privileges are not granted automatically, and the consumer must grant them manually when installing or upgrading. Examples are MANAGE WAREHOUSES, IMPORTED PRIVILEGES ON SNOWFLAKE DB, READ SESSION and EXECUTE ALERT.
Other privileges, and access to existing consumer objects, go through one of two paths. The path depends on whether the provider built a UI with the Python Permission SDK.
| Request type | Provider built a UI with the Python Permission SDK | Provider built no UI |
|---|---|---|
| Global privileges | Consumer grants them in Snowsight; the SDK runs the GRANT statements | Provider tells the consumer which SQL to run, ideally in the app's README |
| References to consumer objects | Consumer associates references in Snowsight | Consumer creates the reference manually, then associates it with the app |
References run from the app to objects in the consumer account. The provider declares them in the manifest file, and the consumer binds each one to a real object after installation. Because references use logical names, the provider never needs to know the consumer's database or schema names.
Provider data is the opposite direction. The installed app must be able to reach that data from the consumer account, and objects outside the application package can't be shared with it directly. The provider grants REFERENCE_USAGE on the external database to the package, creates a view inside the package that reads from it, and grants USAGE and SELECT on that schema and view to the share. Before an app can use an external table or Iceberg table from the provider account, the consumer must also allow it.
On connectivity, the Security tab of a private listing lists the Connections the app requests. Connecting to an external endpoint takes two things. The CREATE EXTERNAL ACCESS INTEGRATION and CREATE SECURITY INTEGRATION privileges let the app create the integration objects it needs. The consumer must also approve the app specification that allows the app to connect to external hosts. If the consumer does not approve it, the external connection stays disabled. The sources provided don't describe any further network setup between provider and consumer accounts.
GRANT REFERENCE_USAGE ON DATABASE other_db
TO SHARE IN APPLICATION PACKAGE app_pkg;Checkpoint 4 of 7· Match them up
Match each installation and configuration term to its description.
Tap a term, then the definition that fits it.
Category 1 requests and references concern the consumer account, and the Permission SDK is the UI for granting them. REFERENCE_USAGE is a provider-side grant that makes provider data reachable through the package.
“References allow the app to access existing objects in the consumer account.”Source: docs.snowflake.com
4.Running several instances of one app
A provider can configure an app so that a consumer can install it more than once. Once the first install is done, from either a private listing or the Marketplace, the consumer opens the app under Catalog » Apps and selects Add instance. They name the instance, choose a warehouse, and select Get, and Snowflake emails the app admin. After installing an instance, the consumer can set up event tracing for the app, configure its privileges, and do other management tasks.
There are three limits. Add instance appears only if the provider has turned the feature on. An account can have at most 30 instances of the app. Apps installed from a trial listing or a monetized listing can't have multiple instances at all.
Checkpoint 5 of 7· Check yourself
A consumer has installed a paid Marketplace app and can't find Add instance. What is the most likely reason?
Trial and monetized listings don't support multiple instances, so with only one install the 30-instance limit isn't the cause. Event sharing and release channels have no effect on Add instance.
“Apps installed from a trial listing or a monetized listings cannot have multiple instances.”Source: docs.snowflake.com
Checkpoint 6 of 7· Exam question
A provider declares several privileges in the application manifest under manifest_version: 2. During installation, which of these privileges can only be granted through explicit manual action by the consumer, because Snowflake does not grant them automatically? (Select all that apply)(Select 3)
Correct answers: A, C, E — MANAGE WAREHOUSES; IMPORTED PRIVILEGES ON SNOWFLAKE DB; READ SESSION
- A. MANAGE WAREHOUSES is one of the privileges Snowflake cannot fulfill automatically, so a consumer administrator must grant it manually during install or upgrade.
- B. CREATE WAREHOUSE is on the list of privileges Snowflake can grant automatically to the app based on the manifest declaration, so no manual step is required.
- C. IMPORTED PRIVILEGES ON SNOWFLAKE DB cannot be auto-granted and must be explicitly approved by the consumer administrator.
- D. CREATE COMPUTE POOL is supported for automatic fulfillment, so Snowflake grants it without requiring a separate manual approval step.
- E. READ SESSION requires manual consumer approval since it is not among the privileges eligible for automatic granting.
- F. EXECUTE TASK is one of the privileges Snowflake can automatically grant to the application, so it does not require a manual approval step.
Sources1
5.Troubleshooting installation failures
Most installation problems come from a prerequisite that wasn't met. Apps with containers install the same way, but the account must have Snowpark Container Services enabled. If the app requested CREATE COMPUTE POOL it may create its own compute pool, and that pool can't be shared with other apps or with the consumer's own workloads. If the install screen shows a privilege or App Spec nobody mentioned during procurement, stop and ask the provider before continuing. Some failures can only be fixed by the provider. For example, if the setup script fails because of something retrying can't fix, such as a syntax error, the documentation says the fix comes when the app is upgraded to a new version or patch.
The setup script can run more than once during installation and upgrade. That is why Snowflake recommends CREATE OR REPLACE or CREATE IF NOT EXISTS for objects it creates, since after an error those objects might already exist. CREATE OR REPLACE on a procedure also removes the privileges previously granted on it. If the script then fails, consumers can lose access to that procedure until the provider ships a fix.
To see why an install failed, run DESCRIBE APPLICATION. An upgrade_state of INSTALL_FAILED means the application object could not be created, and the UPGRADE_FAILURE_REASON column gives the reason. The object stays in that state until it is dropped. An upgrade_failure_type of VERSION_SETUP means the setup script itself had an error, such as a syntax error.
One error a consumer may see during install is about tags or policies in a versioned schema. It says that a tag in a versioned schema can only be assigned to objects in the same schema, and the same applies to policies. The provider has to fix the setup script, so the consumer should ask the provider to update it. The consumer should also not assign a tag or policy from a versioned schema to objects in their account.
| Symptom | Cause / fix |
|---|---|
| Cannot access the listing | Role lacks IMPORT SHARE and CREATE APPLICATION; use ACCOUNTADMIN or grant both |
| Cannot pay for the app | Role lacks PURCHASE DATA EXCHANGE LISTING |
| Install blocked by required event definitions | Consumer must set up an event table before installing |
| No Add instance option | Provider did not configure the app to allow multiple instances |
Checkpoint 7 of 7· Check yourself
A consumer's install of an app that runs containers fails before any objects are created. Which prerequisite should they check first?
Container apps require Snowpark Container Services on the consumer account. Compute pools can't be shared with an app, and DEVELOP and event routing tables are provider-side settings.
“your account must have Snowpark Container Services enabled.”Source: docs.snowflake.com
Exam traps
Each one states something that sounds right. Open it to see what is actually true.
1.Any app can be installed up to 30 times in the same account.Why is that wrong?
The provider must turn on multiple instances, and apps from trial or monetized listings can never have more than one instance.
Covered in Running several instances of one app
2.A provider can share a table from any of its databases with the installed app by granting it to the package.Why is that wrong?
Objects outside the package can't be shared directly. The provider grants REFERENCE_USAGE on the database and exposes the data through a view inside the package.
Covered in How the app gets privileges and object access during installation
3.A private listing has passed the same review as a public Marketplace listing, so it needs less scrutiny.Why is that wrong?
Private listings may skip Marketplace-level review, so consumers should evaluate them just as carefully.
Covered in Installing from a listing compared with installing from a package
Sources
Every claim above is drawn from one of these pages, quoted as it was written on the date shown.
- 1.
“To pay for an app, your role must also have the PURCHASE DATA EXCHANGE LISTING privilege and you must meet additional criteria.”
↩︎ Check privileges before anyone clicks Get“you can test your app by creating a private listing, sharing it with another account in your organization”
↩︎ Installing from a listing compared with installing from a package“Apps installed from the QA release channel have not been reviewed or tested.”
↩︎ Installing from a listing compared with installing from a package“If multiple instances are enabled for an app, you can install a maximum of 30 instances in your account.”
↩︎ Running several instances of one app“After installing the app instance, you can set up event tracing for an app, configure privileges for the app”
↩︎ Running several instances of one app“Add instance only appears if the provider has configured the app to allow multiple instances.”
↩︎ Exam trap 1“To access a listing, you must use the ACCOUNTADMIN role or another role with the IMPORT SHARE and CREATE APPLICATION privileges.”
↩︎ Checkpoint“Select the listing, then view the privileges and logging requests for the app”
↩︎ Checkpoint“Apps installed from a trial listing or a monetized listings cannot have multiple instances.”
↩︎ Checkpoint - 2.https://docs.snowflake.com/en/developer-guide/native-apps/installing-testing-applicationOfficial docs
“The INSTALL object-level privilege granted on the application package.”
↩︎ Check privileges before anyone clicks Get“grant the DEVELOP object-level privilege on the application package to a role.”
↩︎ Check privileges before anyone clicks Get“providers can create an app within the same account as the application package”
↩︎ Installing from a listing compared with installing from a package - 3.
“publishing a listing containing the application package as the data product of a listing”
↩︎ Check privileges before anyone clicks Get - 4.
“the app must pass an automated security scan to ensure that it is secure and stable.”
↩︎ Check privileges before anyone clicks Get - 5.
“trace events and log messages from that region are dropped”
↩︎ Check privileges before anyone clicks Get - 6.
“These are automatically granted to the app if you agree and proceed with the installation.”
↩︎ How the app gets privileges and object access during installation“Compute pools cannot be shared across apps or between an app and your non-app workloads.”
↩︎ Troubleshooting installation failures“The app is not fully operational at this point”
↩︎ Key concept“private listings may not have gone through the same Marketplace-level review that public listings require.”
↩︎ Exam trap 3“your account must have Snowpark Container Services enabled.”
↩︎ Checkpoint - 7.
“When a provider configures an app to use manifest_version: 2 in the manifest file, automated granting of privileges is enabled.”
↩︎ How the app gets privileges and object access during installation“to allow connections to an external endpoint, consumers must also approve the app specification which allows the app to connect to external hosts.”
↩︎ How the app gets privileges and object access during installation - 8.
“Some privileges are not automatically granted to the app. Consumers must manually grant these privileges when installing or upgrading an app.”
↩︎ How the app gets privileges and object access during installation - 9.
“The Python Permission SDK automatically runs the required GRANT statements in the consumer account.”
↩︎ How the app gets privileges and object access during installation“A provider defines the references that the app requests in the manifest file.”
↩︎ How the app gets privileges and object access during installation“References allow the app to access existing objects in the consumer account.”
↩︎ Checkpoint - 10.
“Consumers must allow the app to use an external or Iceberg table in the provider account before it is available to the app.”
↩︎ How the app gets privileges and object access during installation“You cannot share objects outside the application package directly with app installed in the consumer account.”
↩︎ Exam trap 2 - 11.
“If a setup script fails due to an issue that cannot be resolved by retrying, for example a syntax error”
↩︎ Troubleshooting installation failures“The setup script can be run multiple times during installation and upgrade.”
↩︎ Troubleshooting installation failures“the consumer should ask the provider to update their setup script”
↩︎ Troubleshooting installation failures - 12.
“INSTALL_FAILED: The creation of the application object failed.”
↩︎ Troubleshooting installation failures