metricsign
Start free
Medium severitypermission

Power BI Refresh Error:
230

What does this error mean?

The database user does not have SELECT permission on the specified table or view.

Common causes

  • 1The service account was added to the database but not granted read permissions
  • 2The table was recently created without re-granting SELECT to the service account
  • 3Row-level security or column-level permissions are blocking the query

How to fix it

  1. 1Step 1: Grant SELECT on a specific table: GRANT SELECT ON [schema].[table_name] TO [username];
  2. 2Step 2: Grant SELECT on the entire schema (covers all current and future tables): GRANT SELECT ON SCHEMA::[dbo] TO [username];
  3. 3Step 3: For a read-only service account, use the built-in role: ALTER ROLE db_datareader ADD MEMBER [username];

Frequently asked questions

What is the fastest way to grant read access to all tables?

USE [targetdb]; ALTER ROLE db_datareader ADD MEMBER [username]; — this grants SELECT on all current and future tables in the database.

How do I find which tables a user cannot access?

Run: SELECT OBJECT_NAME(major_id), permission_name FROM sys.database_permissions WHERE grantee_principal_id = USER_ID('username') AND type = 'SL'; — absence of a table here means no explicit grant (and no role coverage).

Does error 230 block all columns or just some?

Error 230 blocks the entire table. Column-level permission denial raises a different message. If you need column-level restrictions, use views to expose only the allowed columns.

Official documentation: https://learn.microsoft.com/en-us/sql/relational-databases/errors-events/mssqlserver-230-database-engine-error

Other permission errors