在 Visual Studio 中对数据库执行作之前,必须使用对该数据库具有特定权限的帐户登录。 您所需的特定权限将基于您要执行的操作而异。 以下各节介绍可能需要执行的每个作以及执行所需的权限。
创建或部署数据库的权限
必须具有以下权限才能创建或部署数据库。
| Action | 所需的权限 |
|---|---|
| 导入数据库对象和设置 | 您必须能够连接到源数据库。 如果源数据库基于 SQL Server 2005,则还必须拥有每个对象的 VIEW DEFINITION权限。如果源数据库基于 SQL Server 2008 或更高版本,则还必须拥有每个对象的 VIEW DEFINITION 权限。 您的登录名必须具备 VIEW SERVER STATE 权限(用于数据库加密密钥)。 |
| 导入服务器对象和设置 | 必须能够连接到指定服务器上的主数据库。 如果服务器正在运行 SQL Server 2005,则必须对服务器具有 VIEW ANY DEFINITION 权限。如果源数据库基于 SQL Server 2008 或更高版本,则必须对服务器具有 VIEW ANY DEFINITION 权限。 您的登录名必须具备 VIEW SERVER STATE 权限(用于数据库加密密钥)。 |
| 创建或更新数据库项目 | 无需任何数据库权限来创建或修改数据库项目。 |
| 部署新数据库或使用 “始终重新创建数据库 ”选项集进行部署 | 你必须具有 CREATE DATABASE 权限,或者是目标服务器上的 dbcreator 角色的成员。创建数据库时,Visual Studio 将连接到 model 数据库并复制其内容。 用于连接到目标数据库的初始登录名(例如 ,yourLogin)必须具有 db_creator 和 CONNECT SQL 权限。 此登录名必须在 model 数据库上具有用户映射。 如果你有 sysadmin 权限,可以通过发出以下 Transact-SQL 语句来创建映射:USE [model] CREATE USER yourUser FROM LOGIN yourLogin.用户(在此示例中,yourUser)必须在 CONNECT 数据库上拥有 VIEW DEFINITION 和 model 权限。 如果你有 sysadmin 权限,可以通过发出以下 Transact-SQL 语句来授予这些权限:USE [model] GRANT CONNECT to yourUser GRANT VIEW DEFINITION TO yourUser。如果您部署一个包含未命名约束的数据库并启用了 CheckNewConstraints 选项,则必须被授予 db_owner 或 sysadmin 权限,否则部署将失败。 (默认情况下已启用 CheckNewConstraints 。此要求仅适用于未命名的约束。 |
| 部署对现有数据库的更新 | 您必须是有效数据库用户。 还必须是 db_ddladmin 角色的成员、拥有架构或者拥有要在目标数据库上创建或修改的对象。 您需要其他权限以便在预先部署或后期部署脚本中使用更高级概念,例如登录名或链接服务器。 如果部署到主数据库,则还必须对要部署到的服务器具有 VIEW ANY DEFINITION 权限。 |
在数据库项目中使用具有EXTERNAL_ACCESS功能的程序集。 |
必须设置 TRUSTWORTHY 数据库项目的属性。 您必须拥有 SQL Server 登录的 EXTERNAL ACCESS ASSEMBLY 权限。 |
| 将程序集部署到新的或现有的数据库 | 必须是目标部署服务器上的 sysadmin 角色的成员。 |
重构数据库的权限
数据库重构仅在数据库项目中发生。 您必须有权使用数据库项目。 在将更改部署到目标数据库之前,不需要对目标数据库拥有权限。
对 SQL Server 数据库执行单元测试的权限
必须具有以下权限才能在数据库上执行单元测试。
| Action | 所需的权限 |
|---|---|
| 执行测试操作 | 您必须使用执行上下文数据库连接。 有关详细信息,请参阅 连接字符串和权限概述。 |
| 执行预先测试或后期测试操作 | 您必须使用特权上下文数据库连接。 此数据库连接具有比执行上下文连接更高的权限。 |
运行 TestInitialize 和 TestCleanup 脚本 |
您必须使用特权上下文数据库连接。 |
| 在运行测试前部署数据库更改 | 您必须使用特权上下文数据库连接。 有关详细信息,请参阅 如何:配置 SQL Server 单元测试执行。 |
| 在运行测试前生成数据 | 您必须使用特权上下文数据库连接。 有关详细信息,请参阅 如何:配置 SQL Server 单元测试执行。 |
生成数据的权限
若要使用数据生成器生成测试数据,必须对目标数据库中的对象具有 INSERT 和 SELECT 权限。 如果在生成数据之前删除数据,则还必须对目标数据库中的对象具有 DELETE 权限。 若要重置 IDENTITY 表上的列,必须拥有该表,或者必须是 db_owner 或 db_ddladmin 角色的成员。
用于比较架构和数据的权限
您必须具有以下权限才能比较架构或数据。
| Action | 所需的权限 |
|---|---|
| 比较两个数据库的架构 | 必须具有从数据库导入对象和设置的权限,如 创建或部署数据库的权限中所述。 |
| 比较数据库和数据库项目的架构 | 必须具有从数据库导入对象和设置的权限,如 创建或部署数据库的权限中所述。 还必须具有在 Visual Studio 中打开的数据库项目。 |
| 将更新写入目标数据库 | 必须具有将更新部署到目标数据库的权限,如 创建或部署数据库的权限中所述。 |
| 比较两个数据库的数据 | 除了比较两个数据库模式所需的权限外,还需要对要比较的所有表拥有 SELECT 权限。 你还需要VIEW DATABASE STATE权限。 |
运行 Transact-SQL 编辑器的权限
您的执行上下文对目标数据库确定了您可以在 Transact-SQL 编辑器中执行的操作。
SQL Server CLR 项目的权限
下表列出了必须部署或调试公共语言运行时 (CLR) 项目的权限。
| Action | 所需的权限 |
|---|---|
| 部署安全权限集程序集(最初或增量部署) |
db_DDLAdmin权限授予CREATE和ALTER你部署的程序集和对象类型的权限。部署需要数据库级 VIEW DEFINITION 权限。数据库级 CONNECT 权限授予连接到数据库的能力。 |
| 部署用于外部访问的权限集程序集 |
db_DDLAdmin权限授予CREATE和ALTER你部署的程序集和对象类型的权限。部署需要数据库级 VIEW DEFINITION 权限。数据库级 CONNECT 权限授予连接到数据库的能力。还必须将 TRUSTWORTHY 数据库选项设置为 ON。用于部署的登录账户必须具有 外部访问程序集 服务器权限。 |
| 部署非安全权限集程序集 |
db_DDLAdmin权限授予CREATE和ALTER你部署的程序集和对象类型的权限。部署需要数据库级 VIEW DEFINITION 权限。数据库级 CONNECT 权限授予连接到数据库的能力。还必须将 TRUSTWORTHY 数据库选项设置为 ON。用于部署的登录名必须具有 不安全程序集 服务器权限。 |
| 远程调试 SQL CLR 程序集 | 必须具有 sysadmin 固定角色权限。 |
重要
在所有情况下,程序集所有者必须是用于部署程序集的用户,或者所有者必须是该用户所属的角色。 该要求还适用于您部署的程序集引用的任何程序集。