非管理员用户实例
更新日期: 2005 年 12 月 5 日
用户实例是一项功能,可以使非管理员用户使用自己的帐户运行 SQL Server 的本地版本。有了用户实例,非管理员用户便可对使用自己的帐户运行的实例具有数据库所有者特权。
用户实例也称为子实例或客户端实例,是指父实例(作为服务运行的主实例,如 SQLExpress)代表用户生成的 SQL Server 实例。用户实例作为用户进程在该用户的安全上下文中运行。用户实例和父实例以及计算机上运行的任何其他用户实例相互独立。用户实例功能也称为“作为正常用户运行”(RANU)。
注意: |
---|
为了保持一致,SQL Server Express 联机丛书将此功能称为用户实例。此外,此功能仅可用于 SQL Server 2005 Express Edition。 |
为何使用用户实例?
下面列出了一些概述使用用户实例模型的优点的原因:
- 用户实例模型的主要目的是使 SQL Server 的非管理员用户之间相互独立,从而允许用户附加任意数据库而不会带来危及其他用户的风险。通过为每个用户生成单独的 SQL Server 实例来实现这种独立性。
- 除了保持独立性以外,SQL Server Express 的目的还包括便于非管理员用户使用。许多 Windows 用户都有拥有具有管理特权的帐户。但是,以 Administrator 的身份运行容易使恶意软件侵占用户计算机。但是,非管理员用户运行的恶意软件不能进行系统范围内的更改,因此只能造成有限的破坏。
用户实例概述
用户实例模型可总结为下列几点:
- 必须运行 SQL Server 父实例才能生成用户实例。
- 每当安装 SQL Server Express 时,安装程序都会创建 Template Data 文件夹,用来存储用户实例进程(如果调用)将使用的无错的系统数据库。
- 若要调用用户实例,请使用 SQLClient 中的 user instance 连接字符串关键字(可以为 true,也可以为 false),并默认为 false。当设置为 false 时,任何用户实例支持都无效,并且保留原始行为。如果 user instance 设置为 true,则会在 ADO .NET connection.open 调用过程中激活用户实例模型。
注意: System.Data.SqlClient 命名空间定义了一组类,这些类可以访问 SQL Server 数据库,并统称为 SQL Server 或 SqlClient .NET 数据提供程序。托管应用程序通过 ADO .NET API 与 SqlClient 进行交互,以便对 SQL Server 数据库中存储的数据和架构信息进行查询和操作。有关详细信息,请参阅 Visual Studio 2005 文档。 - 当首次为任意用户生成用户实例时,系统数据库会从 Template Data 文件夹复制到用户的本地应用程序数据存储库目录下的路径,以供用户实例独占使用。此路径通常为驱动器:\Documents and Settings\Username\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS。**
- 用户作为 SysAdmin 连接到这个新的用户实例并使用数据库,即使该用户不是父实例中的管理员。
注意: |
---|
用户数据库根据文件系统特性以及数据库主文件的权限来派生其 READONLY 属性。不应用 ALTER DATABASE SET READ_ONLY/READ_WRITE 设置。 |
- 当生成用户实例时, SQLClient 将所有调用都重定向到该用户实例。
使用用户实例所需的连接字符串
conn string =
"Data Source=.\\SQLExpress" +
"integrated security=true;" +
"attachdbfilename=|DataDirectory|\mydb.mdf;" +
"user instance=true"
string connstr = GetConnectionString(); // get from config
using(SqlConnection conn = new SqlConnection(connstr)) {
// this will connect to the user instance, not to the
// default SSE instance
conn.Open();
// use the connection to the user instance
}
连接到用户实例
仅通过本地命名管道为用户实例提供网路协议支持,这意味着用户不能从远程计算机连接到用户实例。
有关使用 SQL Server Management Studio 连接到用户实例的详细信息,请参阅 SQL Server Express 联机丛书中的“SQL Server Management Studio 和 SQL Server Express”
注意: |
---|
有关命名管道或网络协议的详细信息,请参阅 SQL Server 配置管理器帮助。若要访问此帮助,请在“开始”菜单上,单击“运行”,再键入 SQLServerManager.msc。这样便可打开“SQL Server 配置管理器”。若要访问帮助,请单击“帮助”菜单。若要查看 SQL Server 的网络协议,请单击“SQL Server 2005 网络配置”。 |
管理用户实例
如果您是管理员并要管理用户实例,则以下信息将非常有用。
视图/存储过程/Transact-SQL | 说明 |
---|---|
Select * from sys.dm_os_child_instances |
允许执行列出父实例中生成的所有用户实例的虚拟视图。 |
SHUTDOWN |
停止 SQL Server。使用该命令可以停止用户实例。有关如何使用 SHUTDOWN 的详细信息,请参阅 SQL Server 2005 联机丛书中的 SHUTDOWN (Transact-SQL)。 |
sp_configure 'user instances enabled' |
控制启用或禁用用户实例的功能。 若要启用用户实例的生成,请使用:
若要禁用用户实例的生成,请使用:
|
sp_configure ‘user instance timeout’ |
用途:
其中 5 为最小值,65535 为最大值。 您需要 sp_configure ‘show advanced options’ 才能查看和设置超时值。有关显示高级选项的详细信息,请参阅 SQL Server 2005 联机丛书中的设置服务器配置选项。 您可以在父实例和用户实例中设置用户实例超时值。 当用户实例启动时,它始终从父实例中获取超时值。但是,一旦用户实例启动,它便可使用 sp_configure 来更改仅对于该特定实例有效的超时值。 |
使用用户实例时的限制
当使用用户实例时,某些 SQL Server Express 功能可能不会如预期的那样发挥作用。以下列表说明可能出现的限制:
- 一个用户只能有一个用户实例。
- 复制将被禁用。
- 用户实例不支持 SQL Server 身份验证。仅支持 Windows 身份验证。
- 支持用于用户实例的网络协议仅为本地 Named Pipes。
- 用户实例共享父实例的注册表项。
- 不支持用户实例使用本机代码。只有 ADO .NET 支持该功能。
- SQL Server Express 用户实例不支持全文搜索。
- 动态生成的用户实例中不支持 WMI Provider for Server Events。该功能仍在父 SQL Server Express 实例中发挥作用。有关 WMI 提供程序的详细信息,请参阅 SQL Server 2005 联机丛书中的 WMI Provider for Server Events。