内置系统账户:Local system/Network service/Local Service 区别

本文详细介绍了在安装SQL Server 2008 R2时如何选择合适的账户类型(LocalSystem, NetworkService, LocalService),并解释了它们之间的区别。文章还提供了关于如何在安装APEXSQL和设置SQL Server属性时正确选择账户的实用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文献:

http://www.cnblogs.com/xianspace/archive/2009/04/05/1429835.html

前言

今天在安装sqlserver2008 r2的时候,在Server Configuration阶段要求我设定sqlserver中各种服务的账户名称,如下图所示:

账户类型可以在后期修改,改的就是服务中的log on as里面的属性。

那么Local system/Network service/Local Service这三种账户有什么区别呢?

LocalSystem   账户 

LocalSystem是预设的拥有本机所有权限的本地账户,这个账户跟通常的用户账户没有任何关联,也没有用户名和密码之类的凭证。这个服务账户可以打开注册表的HKEY_LOCAL_MACHINE\Security键,当LocalSystem访问网络资源时,它是作为计算机的域账户使用的。 

举例来说,以LocalSystem账户运行的服务主要有:WindowsUpdate   Client、   Clipbook、Com+、DHCP   Client、Messenger   Service、Task   Scheduler、Server   Service、Workstation   Service,还有Windows   Installer。 

Network   Service   账户 

Network   Service账户是预设的拥有本机部分权限的本地账户,它能够以计算机的名义访问网络资源。但是他没有Local   System   那么多的权限,以这个账户运行的服务会根据实际环境把访问凭据提交给远程的计算机。Network   Service账户通常可以访问Network   Service、Everyone组,还有认证用户有权限访问的资源。

举例来说,以Network   Service账户运行的服务主要有:Distributed   Transaction   Coordinator、DNS   Client、Performance   Logs   and   Alerts,还有RPC   Locator。

Local   Service   账户 

Local   Service账户是预设的拥有最小权限的本地账户,并在网络凭证中具有匿名的身份。Local   Service账户通常可以访问Local   Service、Everyone组还有认证用户有权限访问的资源。

举例来说,以Local   Service账户运行的服务主要有:Alerter、Remote   Registry、Smart   Card、SSDP,还有WebClient。

简单说明:

Local   system   :本地系统用户,   个人电脑通常选择这个用户 

Network   service   :网络服务用户,   通常需要远程连接的都使用这个 

Local   Service   :本地服务 

另外还有一个要求输入用户名密码的那个用户是域用户,这个是做集群的时候选择的登陆方式

PS:2012-7-10

今天在安装APEXSQL的时候,能够成功安装,但是不能连接数据库,每次都让我创建一个administration的账户,但是我创建了,加入到了administrators组还是不能连接,最后在SQL Server的properties中,将账户有network service 改为local system就可以连接了。

之所以要使用local system是因为apexsql里面要用到一些系统底层的东西,所有要求最高权限。

PS:2012-8-24

如果我们打开任务管理器,在user name那一列我们能够看到很多账户名,常见的有以下几类

1.) SYSTEM
2.) NETWORK SERVICE
3.) Domain Users
4.) LOCAL SERVICE
那么这些到底都有什么区别呢,这些在下面的这篇文章有种介绍。

http://www.vistaheads.com/forums/microsoft-public-windows-vista-general/86838-what-system-network-service-account.html

那么应该使用什么账户来启动sql server呢?下面这篇文章给出了详细的介绍。

http://social.msdn.microsoft.com/Forums/en/sqlsecurity/thread/31d57870-1faa-4e14-8527-ce77b1ff40e4

我来总结一下上面这篇文章的中心思想。

  1. 不用使用bulit-in的三张账号来启动sql server。
  2. local system的权限太高了,如果sql server 被黑客入侵,创建一个thread,那么这个thread就具有和sqlservr.exe这个进程相同的权限,这个thread可以在本机上做任何操作。还有一个弊端就是local system只有在本机上有很高的权限,但是出了本机,就没有什么权限了,比如要做DB Mirroring的时候,使用local system就不行。
  3. network service相对于local system在本机上权限少了一点,但是他可以访问网络资源,比如可以做DB Mirroring,但是有一个不好就是他的权限还是弱了一点。network service使用的是computer account。
  4. 至于local service,他是权限最小的一个built-in账户,只能用于启动本地服务,sql browser建议使用local service。这在在msdn上也有提到,给sqlbrowser.exe一个较低权限的账户。
  5. sql server启动账户的最佳事件就是使用authenticated user。如果机器在domain里面,那么使用domain user,如果没有在domain里面就使用local user。不乱是domain user还是local user都需要给予特定的权限,权限不要太高。

参考:SQL Server 2008中的Service SID 

在我们安装完sql server 2008和2012以后,我们会发现在security下面的login中有类似NT Service\MSSQL$SQL2012、NT SERVICE\ReportServer$SQL2012和NT SERVICE\SQLAgent$SQL2012这样子的账户。这些其实都是Service SID所对应的名字。

Service SID的引入,是为了解决多个Service可能同用一个service帐号启动所带来的安全隐患。如IIS 使用Network Service帐号,可能其他服务也使用Network Service帐号。为了使得IIS能够连接到SQL Server, 我们可能会把Network Service作为SQL Server的login, 但是这是不安全的。因为其他服务如果以Network Service做为启动帐号的话,也能访问SQL Server。为了解决这个问题,在SQL Server 2008/Windows Server 2008及以后,我们有了SID这个概念。这样不同的服务,即使服务启动帐号是相同的,它们的SID也是不同的。

对于NT Service\MSSQL$SQL2012、NT SERVICE\ReportServer$SQL2012和NT SERVICE\SQLAgent$SQL2012这些login,并不是Windows Users或Group的名字, 而是SID的名字。其相对应的SID值,我们可以用命令 sc  showsid serviceName所得到,如下图所示:

 

 

 

 

<think>我们首先需要理解用户的问题。用户提供的信息似乎包含了一些本地网络服务的URL,但并没有提出具体的Java问题。然而,用户要求我们作为Java专家回答问题,并按照特定格式回复。 由于用户没有提出具体问题,我们需要假设用户可能希望我们解释一个常见的Java概念,或者用户可能忘记提出问题。在这种情况下,我们可以选择一个基础的Java概念进行解释,并按照要求的格式提供回答。 我们选择解释“Java中的异常处理”,因为这是一个基础且重要的主题。 回答格式: 1. 回答问题并给出解释。 2. 提供代码示例(只能是Java代码)。 3. 最后提出四个相关问题,按照指定格式。 注意:用户要求我们作为Java专家,所以回答要详尽。 下面开始回答:</think>### Java中的异常处理机制 异常处理是Java中处理运行时错误的机制,通过`try-catch-finally`和`throw`/`throws`实现健壮性。以下是核心要点: 1. **`try-catch`块**: - **作用**:捕获并处理代码块中的异常。 - **示例**: ```java try { int result = 10 / 0; // 抛出ArithmeticException } catch (ArithmeticException e) { System.out.println("除数不能为零: " + e.getMessage()); } ``` 2. **`finally`块**: - **作用**:无论是否发生异常,都会执行的代码(常用于资源清理)。 - **示例**: ```java FileInputStream file = null; try { file = new FileInputStream("test.txt"); // 文件操作... } catch (FileNotFoundException e) { System.out.println("文件未找到"); } finally { if (file != null) { try { file.close(); } catch (IOException e) { /* 忽略 */ } } } ``` 3. **`throw` 和 `throws`**: - **`throw`**:主动抛出一个异常对象(如 `throw new IllegalArgumentException("无效参数")`)。 - **`throws`**:声明方法可能抛出的异常类型。 ```java public void readFile() throws IOException { // 可能抛出IOException的代码 } ``` 4. **异常分类**: - **受检异常(Checked Exception)**: 必须显式处理(如 `IOException`)。编译器强制要求捕获或声明抛出。 - **非受检异常(Unchecked Exception)**: 继承自 `RuntimeException`(如 `NullPointerException`),无需强制处理。 **为什么需要异常处理?** - **错误隔离**:将正常逻辑与错误处理分离,提升代码可读性。 - **资源安全**:`finally` 块确保资源(文件、网络连接)被正确释放。 - **灵活恢复**:通过捕获特定异常类型,实现针对性恢复策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值