使用 SQL Server 登录






4.81/5 (39投票s)
了解有关 SQL Server 登录的详细信息。
此外,我在我的博客 Just Like a Magic 上写了这篇文章。
概述
本课程将详细讨论 SQL Server 登录的所有细节。首先,它将讨论如何创建 SQL Server 登录。之后,它将重点介绍如何更改现有登录的属性。接下来,它将讨论如何删除现有登录。此外,我们将重点介绍如何枚举现有登录和角色的列表。最后,我们将探讨如何管理 SQL Server 中的登录权限。此外,我们还将连接 SQL Server 和 .NET Framework,并将教您许多此课程未涵盖的技术。
目录
这是本课程的目录
- 概述
- 目录
- 引言
- 创建 SQL Server 登录
- 通过 SQL Server Management Studio 创建登录
- 通过 CREATE LOGIN T-SQL 语句创建登录
- 从 Windows 域帐户创建登录
- 创建仅适用于 SQL Server 的登录
- 通过系统存储过程创建登录
- 通过 .NET 创建登录
- 使用登录访问 SQL Server
- 通过 SQL Server Management Studio 访问 SQL Server
- 通过 .NET 访问 SQL Server
- 更改现有登录
- 通过 SQL Server Management Studio 更改登录
- 通过 ALTER LOGIN T-SQL 语句更改登录
- 更改登录的名称和密码
- 启用/禁用登录
- 通过 .NET 更改登录
- 删除现有登录
- 通过 SQL Server Management Studio 删除登录
- 通过 DROP LOGIN T-SQL 语句删除登录
- 通过系统存储过程删除登录
- 通过 .NET 删除登录
- 枚举现有登录
- 处理权限
- 通过登录属性对话框更改用户权限
- 通过服务器属性对话框更改用户权限
- 参考文献
- 摘要
引言
今天,我们将重点关注如何处理 SQL Server 登录。登录就是访问 SQL Server 的凭据。例如,在登录 Windows 或您的电子邮件帐户时,您会提供用户名和密码。这些用户名和密码构成了凭据。因此,凭据就是用户名和密码。
您需要有效的凭据才能访问您的 SQL Server 实例,甚至可以从 .NET 应用程序访问数据库。就像 Windows 凭据一样,SQL Server 使用多个凭据来不同地保护其每个粒度。例如,Windows 将用户标识与多个角色相关联。因此,用户只能访问基于其标识和角色的允许资源。此外,使用 ACL,您可以限制对某些系统资源的访问,并允许其他资源。另一方面,SQL Server 使用凭据来管理用户对 SQL Server 的操作。例如,特定用户可能不允许访问 Northwind 数据库,甚至不允许修改它。
出于这些原因以及更多原因,我们决定在本课程中讨论如何处理 SQL Server 登录。
SQL Server 允许四种类型的登录
- 基于 Windows 凭据的登录。
- 仅适用于 SQL Server 的登录。
- 映射到证书的登录。
- 映射到非对称密钥的登录。
实际上,我们只对基于 Windows 凭据的登录和仅适用于 SQL Server 的登录感兴趣。有关映射登录的更多信息,请查阅 MSDN 文档。
基于 Windows 凭据的登录允许您使用 Windows 用户的名称和密码登录 SQL Server。如果您需要创建自己的凭据(用户名和密码),则可以创建仅适用于 SQL Server 的登录。
创建 SQL Server 登录
要创建、修改或删除 SQL Server 登录,您可以采取三种方法之一
- 使用 SQL Server Management Studio。
- 使用 T-SQL 语句。
- 使用系统存储过程。
当然,您可以将最后两种方法与 SQL Server IDE 或通过 .NET 代码结合使用。
如果您使用的是 SQL Server Express,则可以跳过使用 SQL Server Management Studio 创建登录的第一种方法。
通过 SQL Server Management Studio 创建登录
要通过 SQL Server Management Studio 创建登录,请按照以下步骤操作
- 打开 SQL Server Management Studio。
- 连接到数据库引擎。
- 在对象资源管理器中,向下导航到“安全性”节点,然后导航到“登录”节点。
- 右键单击“登录”节点,然后选择“新建登录”。这将打开“新建登录”对话框。图 1 显示了 SQL Server Management Studio 在登录视图中的状态。
-
在“新建登录”对话框中,选择所需的登录类型并输入所需的信息。如果要从 Windows 域帐户创建登录,请选择“Windows 身份验证”,然后在“登录名”字段中输入域名称和帐户名称。您可以使用“搜索”按钮来确定名称是否存在。值得一提的是,您也可以添加 Windows 域组登录,而不仅仅是用户。如果您想创建仅适用于 SQL Server 的登录,请选择“SQL Server 身份验证”,然后输入所需的用户名和密码。请务必查看密码设置。此外,在“常规”页面中,您可以选择新登录的默认数据库和语言。此外,您可以在“服务器角色”、“用户映射”和“状态”等其他页面上更精细地编辑用户权限。本课程的最后一节将专门介绍这一点。有关更多帮助,请参阅 MSDN 文档。图 2 显示了在添加新的 SQL Server 登录时的“新建登录”对话框。
- 单击“确定”。您的新登录现在可用并准备使用。
“映射到证书”和“映射到非对称密钥”登录呢?实际上,这些登录无法通过“新建登录”窗口创建。但是,您可以通过 CREATE LOGIN 语句创建它,该语句稍后会介绍。但是,我们不会介绍这两种类型。因此,查阅 MSDN 文档很有用。
“新建登录”对话框中的安全设置怎么样?强制执行密码策略意味着强制执行密码规则,例如密码复杂性要求和密码长度。强制执行密码过期意味着用户需要定期更改密码,每隔一段时间由 SQL Server 指定。此外,您可以要求用户在下次登录 SQL Server 时更改密码。请注意,这三个设置彼此相关。例如,禁用密码策略强制执行会禁用其他设置。值得一提的是,这些设置仅适用于仅适用于 SQL Server 的登录。
通过 CREATE LOGIN T-SQL 语句创建登录
另一种创建新登录的方法是通过 CREATE LOGIN
T-SQL 语句。此语句的语法如下
CREATE LOGIN login_name
{ WITH <option_list1> | FROM <sources> }<sources> ::=
WINDOWS [ WITH <windows_options> [ ,... ] ]
| CERTIFICATE certname
| ASYMMETRIC KEY asym_key_name
<option_list1> ::=
PASSWORD = 'password' [ HASHED ] [ MUST_CHANGE ]
[ , <option_list2> [ ,... ] ]
<option_list2> ::=
SID = sid
| DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
| CHECK_EXPIRATION = { ON | OFF}
| CHECK_POLICY = { ON | OFF}
[ CREDENTIAL = credential_name ]
<windows_options> ::=
DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
实际上,此语句可用于创建任何类型的登录。但是,由于本课程的需要,我们将重点介绍如何创建基于 Windows 域帐户(和组)的登录以及仅适用于 SQL Server 的登录。
从 Windows 域帐户创建登录
现在,我们将创建一个名为“Mohammad Elsheimy”的登录,该登录基于存在于“BillGates-PC”计算机上的用户帐户“Mohammad Elsheimy”。此外,我们将默认数据库更改为 Northwind,默认语言更改为 English。
CREATE LOGIN [BillGates-PC\Mohammad Elsheimy] FROM WINDOWS
WITH DEFAULT_DATABASE=[Northwind], DEFAULT_LANGUAGE=[English];
实际上,更改默认数据库和默认语言是可选的。因此,您可以省略两者或仅省略其中一个。
如果您需要创建 Windows 域组的登录,请将登录名更改为组名。
在使用 T-SQL 语句时,请务必在执行 T-SQL 语句后刷新“登录”节点,以查看您的新登录。
如果您使用的是 SQL Server Express,当然您找不到 SQL Server Management Studio 来执行命令。但是,您可以通过 .NET 执行这些命令,这将在稍后介绍。
某些 T-SQL 语句(和存储过程)需要当前登录拥有某些权限才能执行它们。如果您在执行此处找到的任何 T-SQL 语句时遇到安全问题,请查阅 MSDN 文档以获取有关所需权限的更多帮助。虽然如此,请务必查看本课程的最后一节。
创建仅适用于 SQL Server 的登录
现在,我们将创建一个名为“My Username”的登录,密码为“buzzword”。此外,该用户将在下次登录时更改密码。此外,密码策略和过期设置已启用。此外,默认数据库设置为 Northwind,默认语言设置为 English。
CREATE LOGIN [My Username] WITH PASSWORD=N'buzzword'
MUST_CHANGE, CHECK_EXPIRATION=ON, CHECK_POLICY=ON,
DEFAULT_DATABASE=[Northwind], DEFAULT_LANGUAGE=[English];
同样,更改默认数据库和默认语言是可选的。此外,显式设置密码设置也是可选的;您可以省略其中一个或全部省略。但是,如果您省略密码策略强制执行设置,它仍然是开启的。如果您想将其关闭,请显式设置。
通过系统存储过程创建登录
您可以通过系统存储过程 sp_addlogin
创建新登录。此存储过程的定义如下
sp_addlogin [ @loginame = ] 'login'
[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
[ , [ @deflanguage = ] 'language' ]
[ , [ @sid = ] sid ]
[ , [ @encryptopt= ] 'encryption_option' ]
此存储过程接受以下参数
- @loginname
登录名。换句话说,用户名。 - @passwd
可选。登录的密码。默认为NULL
。 - @defdb
可选。默认数据库。默认为MASTER
。 - @deflanguage
可选。默认语言。默认为 NULL,表示 <default>。 - @sid
可选。用于设置新登录的安全标识符 (SID)。如果为NULL
,SQL Server 会自动生成一个。默认为NULL
。请注意,如果这是 Windows 域用户(或组)登录,则此参数会自动设置为该用户(或组)的 Windows SID。 - @encryptopt
可选。默认为NULL
。指定密码是明文还是哈希。此参数可以取以下三个值之一- NULL
指定密码是明文形式设置的。 - skip_encryption
指定密码已哈希。因此,数据库引擎将存储数据库而不会对其进行哈希处理。 - skip_encryption_old
指定密码已哈希,但使用的是早期版本的 SQL Server。因此,数据库引擎将在不重新哈希的情况下存储数据库。此选项仅用于兼容性目的。
- NULL
此函数在成功时返回 0,否则返回 1。
这里有一个示例,再次创建了之前创建的名为“My Username”的登录。
EXEC sys.sp_addlogin N'My Username', N'buzzword';
正如您所料,如果您尝试执行最后一行而名称相同的登录已存在,您将收到错误。
通过 .NET 创建登录
正如您所知,您可以通过 SqlCommand
对象执行任何 SQL Server 命令。因此,我们将把最后两种创建登录的方法与 C# 结合起来。我们将通过 .NET 和 C# 通过我们的 T-SQL 语句以编程方式创建登录。以下是代码
// Connecting to SQL Server default instance
// to the default database using current
// Windows user's identity.
// The default database is usually MASTER.
SqlConnection conn = new SqlConnection
("Data Source=;Initial Catalog=;Integrated Security=True");
// Creating a login specific to SQL Server.
SqlCommand cmd = new SqlCommand
("CREATE LOGIN [My Username] WITH PASSWORD=N'buzzword' " +
"MUST_CHANGE, CHECK_EXPIRATION=ON, CHECK_POLICY=ON, " +
"DEFAULT_DATABASE=[Northwind], DEFAULT_LANGUAGE=[English];",
conn);
// In addition, you can use this command:
// EXEC sys.sp_addlogin N'My Username', N'buzzword'
// Moreover, you can set the command type to stored procedure,
// set the command to sys.sp_addlogin,
// and add parameters to the command to specify the arguments.
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
if (ex.Number == 15025)
Console.WriteLine("Login already exists.");
else
Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
}
finally
{
cmd.Dispose();
conn.Close();
}
请注意分配给错误的数字。
使用登录访问 SQL Server
在这里,我们将介绍访问 SQL Server 的两种技术。我们将介绍通过其 IDE(SQL Server Management Studio)访问 SQL Server,以及通过 .NET 以编程方式访问 SQL Server。
如果您使用的是 SQL Server Express,则可以跳过 SQL Server Management Studio 部分,直接进入 .NET。
通过 SQL Server Management Studio 访问 SQL Server
启动 SQL Server Management Studio 后,您会看到“连接到服务器”对话框,该对话框允许您使用有效凭据(换句话说,登录名)连接到 SQL Server。图 3 显示了“连接到服务器”对话框。
如果您取消此对话框,您将无法连接到服务器。但是,正如您所知,您可以再次通过“对象资源管理器”窗口或“文件”->“连接对象资源管理器”命令进行连接。
在此对话框中,您可以在两种身份验证类型之间进行选择
- Windows 身份验证
使用当前用户的凭据登录服务器。 - SQL Server 身份验证
使用 SQL Server 特有的凭据登录服务器。您可以提供用户名和密码来访问 SQL Server。值得一提的是,管理员用户“sa”也仅限于 SQL Server。
通过 .NET 访问 SQL Server
在 .NET 中,您可以通过另一个登录名以与通过“sa”登录名访问 SQL Server 相同的方式访问 SQL Server,只需将用户名和密码更改为新信息即可。
以下示例显示了如何通过 Windows 身份验证访问 SQL Server。
// Connecting to SQL Server default instance
// to the default database using current
// Windows user's identity.
// The default database is usually MASTER.
SqlConnection conn = new SqlConnection
("Data Source=;Initial Catalog=;Integrated Security=True");
try
{
conn.Open();
// Connected
}
catch (SqlException ex)
{
Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
}
finally
{
conn.Close();
}
现在,是时候编写通过 SQL Server 身份验证访问 SQL Server 的代码了。此代码尝试通过我们新创建的登录名“My Username”登录 SQL Server。您可以在连接字符串的 User ID(或 UID)和 Password(或 PWD)设置中指定您的用户名和密码。
// Connecting to SQL Server default instance
// to the default database using the user
// "My User" and his password "buzzword"
// The default database is usually MASTER.
SqlConnection conn = new SqlConnection
("Data Source=;Initial Catalog=;" +
"User ID=My Username;Password=buzzword");
try
{
conn.Open();
// Connected
}
catch (SqlException ex)
{
if (ex.Number == 18456)
Console.WriteLine("Bad username or password.");
else
Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
}
finally
{
conn.Close();
}
请注意,如果您在创建用户时指定了 MUST_CHANGE
设置,则在更改密码之前,您将无法使用此用户访问 SQL Server。请注意返回的错误号。
更改现有登录
虽然您可以使用 SQL Server Management Studio、T-SQL 语句或存储过程创建新登录,但您不能使用第三种方法更改(修改)您的登录。因此,您只有两种方法可以更改新登录,一种是使用 SQL Server Management Studio,另一种是使用 ALTER LOGIN
T-SQL 语句。
通过 SQL Server Management Studio 更改登录
要通过 SQL Server Management Studio 更改登录,请在对象资源管理器中导航到“登录”节点,然后双击您的登录以显示“登录属性”对话框。此对话框与“新建登录”对话框非常相似(但完全相同);它用于更改登录属性。图 4 显示了“登录属性”对话框。
实际上,如果这是 Windows 身份验证登录,您将无法在“常规”页面上更改除默认数据库和默认语言之外的任何信息。但是,您可以在其他选项卡中更改其他特性。
如果这是 SQL Server 身份验证登录,您除了默认数据库和默认语言外,只能更改密码。但是,与 Windows 身份验证登录一样,您可以在其他选项卡中更改其他属性。
通过 ALTER LOGIN T-SQL 语句更改登录
如果您需要对更改过程进行更多控制怎么办?如果您需要修改(更改)其他映射的登录怎么办?答案是,您可以通过 T-SQL 语句 ALTER LOGIN
来做到这一点。此语句的语法如下
ALTER LOGIN login_name
{
<status_option>
| WITH <set_option> [ ,... ]
}
<status_option> ::=
ENABLE | DISABLE
<set_option> ::=
PASSWORD = 'password'
[
OLD_PASSWORD = 'oldpassword'
| <secadmin_pwd_opt> [ <secadmin_pwd_opt> ]
]
| DEFAULT_DATABASE = database
| DEFAULT_LANGUAGE = language
| NAME = login_name
| CHECK_POLICY = { ON | OFF }
| CHECK_EXPIRATION = { ON | OFF }
| CREDENTIAL = credential_name
| NO CREDENTIAL
<secadmin_pwd_opt> ::=
MUST_CHANGE | UNLOCK
更改登录的名称和密码
您无法通过“登录属性”对话框更改用户名,但可以通过 ALTER LOGIN
语句完成。以下 T-SQL 语句将我们的用户“My Username”更改为“someuser”,并将其密码也更改为“newbuzzword”。
ALTER LOGIN [My Username]
WITH NAME = [someuser] , PASSWORD = N'newbuzzword';
作为回顾,某些 T-SQL 语句需要特殊权限。如果您在执行此处找到的语句时遇到安全问题,则您没有授权。请查阅 MSDN 文档以获取有关所需权限的更多帮助。
同样,如果您没有 SQL Server Management Studio,您可以使用 Visual Studio .NET 中的服务器资源管理器。
启用/禁用登录
以下语句禁用“someuser”登录,以便没有人可以访问它。
ALTER LOGIN [someuser] DISABLE;
要恢复您的登录,请将 DISABLE
关键字更改为 ENABLE
关键字。
通过 .NET 更改登录
如前所述,您可以使用 SqlCommand
对象结合 SqlConnection
对象来执行针对数据库的 T-SQL 语句。以下代码段禁用了登录,并尝试使用该登录登录 SQL Server。
// Log in using Windows authentication
SqlConnection conn = new SqlConnection
("Data Source=;Initial Catalog=;Integrated Security=True");
SqlCommand cmd =
new SqlCommand("ALTER LOGIN [someuser] DISABLE;", conn);
try
{
conn.Open();
// Connected
cmd.ExecuteNonQuery();
// Succeeded
conn.Close();
// Another technique to create your connection string
SqlConnectionStringBuilder builder =
new SqlConnectionStringBuilder(conn.ConnectionString);
// Use this line to remove the Windows auth keyword
// builder.Remove("Integrated Security");
// Or else, set Windows authentication to False
builder.IntegratedSecurity = false;
builder.UserID = "someuser";
builder.Password = "newbuzzword";
conn.ConnectionString = builder.ToString();
// The following line would raise the error 18470
conn.Open();
// Connected
conn.Close();
// Closed
}
catch (SqlException ex)
{
if (ex.Number == 18470)
Console.WriteLine("Account disabled.");
else
Console.WriteLine("{0}: {1}",
ex.Number, ex.Message);
}
finally
{
cmd.Dispose();
conn.Close();
}
请注意构建连接字符串的新技术;它使用了 ConnectionBuilder
对象。
删除现有登录
与创建新登录一样,删除(drop)现有登录可以通过以下三种方式之一完成
- 使用 SQL Server Management Studio。
- 使用 T-SQL 语句。
- 使用系统存储过程。
同样,您可以将第二种或最后一种方法与 .NET 结合使用。
如果您使用的是 SQL Server Express,则可以跳过使用 SQL Server Management Studio 创建登录的第一种方法。
通过 SQL Server Management Studio 删除登录
在 SQL Server Management Studio 中,导航到对象资源管理器中的登录对象,然后选择您的登录。在登录的上下文菜单中,您可以选择“删除”来删除登录。
通过 DROP LOGIN T-SQL 语句删除登录
要使用 T-SQL 语句从 SQL Server 中删除登录,您可以使用 DROP LOGIN
语句。以下是该语句的语法
DROP LOGIN login_name
如您所知,要删除“someuser”登录,请使用以下示例
DROP LOGIN [someuser];
您无法删除已登录的用户。
此方法用于所有类型的登录。只需指定登录名。
通过系统存储过程删除登录
系统存储过程 sp_droplogin
是负责删除现有登录的过程。该函数的定义如下:
sp_droplogin [ @loginame = ] 'login'
此函数仅接受一个参数,即登录名。这是删除“someuser”登录的 T-SQL 语句。
EXEC sp_droplogin 'someuser';
再次,某些 T-SQL 语句和过程需要特殊权限。请查阅 MSDN 了解详细信息。此外,最后一节将对此进行介绍。
通过 .NET 删除登录
正如我们之前所说,您可以在 .NET 中通过 SqlCommand
和 SqlConnection
对象执行 T-SQL 语句或存储过程。这是删除“someuser”登录的代码。
SqlConnection conn = new SqlConnection
("Server=.;Data Source=;UID=someuser;PWD=newbuzzword");
SqlCommand cmd = new SqlCommand
("DROP LOGIN [asomeuser];", conn);
// In addition, you can use this command:
// EXEC sp_droplogin 'someuser';
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
if (ex.Number == 15151)
Console.WriteLine("Login does not exist.");
else if (ex.Number == 15007)
Console.WriteLine("Login already logged on.");
else
Console.WriteLine("{0}: {1}", ex.Number, ex.Message);
}
finally
{
conn.Close();
}
枚举现有登录
您可以通过系统表 server_principals
枚举现有登录。此表封装了 SQL Server 主体的相关信息,例如登录名和角色。以下查询语句检索 sys.server_principals
表中的所有数据。
SELECT * FROM sys.server_principals
ORDER BY type, [name];
图 5 显示了我的 SQL Server 实例上的结果快照。
从列名中,您可以知道每列存储什么。但是,server_principals
封装了许多我们不感兴趣的安全数据。例如,它封装了我们在这里不感兴趣的角色信息。type
和 type_desc
列都指定了数据类型。type
列指定类型,而 type_desc
存储该类型的简单描述。
“type”列可以存储多个值,包括
- R
指定数据是SERVER_ROLE
,这意味着数据是 SQL Server 角色的。 - U
指定数据是WINDOWS_LOGIN
类型的登录,这意味着数据是基于 Windows 域帐户的登录。 - G
指定数据是WINDOWS_GROUP
类型的登录,这意味着数据是基于 Windows 域组的登录。例如,基于 Windows 域组 Administrators 的登录。 - S
指定数据是SQL_LOGIN
类型的登录,这意味着数据是仅适用于 SQL Server 的用户的。 - C
指定数据是CERTIFICATE_MAPPED_LOGIN
类型的登录,这意味着数据是映射到证书的登录。 - K
指定数据是ASYMMETRIC_KEY_MAPPED_LOGIN
类型的登录,这意味着数据是映射到非对称密钥的登录。
值得一提的是,is_disabled
列指定帐户是否被禁用(等于 1)或启用(等于 0)。
同样值得一提的是,sid
列指定登录的 SID(安全标识符)。如果这是 Windows 主体(用户或组),它与 Windows SID 匹配。否则,它存储 SQL Server 为该登录(或角色)创建的 SID。
处理权限
我们曾多次遇到权限问题。在这里,我们将讨论如何处理权限以及授予或拒绝用户特定权限。
您曾多次看到用户由于其权限而无法执行某些 T-SQL 语句。您可以在多个地方更改用户的权限,包括“登录属性”对话框和“服务器资源管理器”对话框。
通过登录属性对话框更改用户权限
再次查看登录的“属性”对话框。您可能会注意到存在其他属性页,如“服务器角色”、“用户映射”、“安全对象”和“状态”页面。花时间玩这些设置,不要忘记查阅 MSDN 文档。
通过服务器属性对话框更改用户权限
更改用户权限的另一种方法是通过“服务器属性”对话框。您可以右键单击服务器并选择“属性”以打开“服务器属性”对话框。图 6 显示了显示“权限”页面的“服务器属性”对话框。
正如您可能想到的,通过“权限”对话框进行权限更改。值得一提的是,所有这些选项都可以通过“登录属性”对话框的“安全对象”页面进行更改。但是,在这里您可以轻松地更改多个登录名(或角色)的权限。但是,通过“登录属性”对话框,您需要单独更改每个登录名。
请注意,在此页面上,您可以显式地更改登录名(或角色)的权限。这意味着,如果您没有显式更改该权限,它(登录名或角色)将从它所属的另一个成员身份中获得该权限。例如,如果您没有显式指定“Alter any login”权限给 Windows 用户 Administrator 登录,它将从(例如)Windows Administrators 组登录获得该权限。如果该登录被拒绝了权限,那么 Administrator 登录也将被拒绝。您可以称这种技术为“交集”,就像 Windows ACLs 一样。
花点时间使用“服务器属性”对话框,尤其是在“安全”和“权限”页面上。并确保将 MSDN 文档放在另一只手上。
参考文献
如果您需要更多帮助,查阅 MSDN 文档总是有益的。使用搜索功能搜索 T-SQL 语句或查找对话框或窗口的帮助很有用。
摘要
在本课程结束时,您学习了许多关于 SQL Server 和 .NET 的技术。您了解了登录的所有细节以及如何处理它们。此外,您还学习了许多有助于您更好地编码的 .NET 技术。
祝您有美好的一天……