用同一个帐号同时在多个客户端登录,和用不同的帐号同时登录有什么区别?

Veeve 2003-10-21 09:07:16
假设网络中有基于MS SQL Server的C/S系统,N个客户端都用同一个帐号登录跟分别用不同的帐号登录有何区别?
...全文
286 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
samuelpan 2003-10-23
  • 打赏
  • 举报
回复
用一个普通的只读用户在客户端连接数据库。

然后在程序中更换一个较大权限如sa的用户重新登入数据库。
lvltt 2003-10-23
  • 打赏
  • 举报
回复
学习
Veeve 2003-10-23
  • 打赏
  • 举报
回复
普通用户的话有建库的权限吗?有建表的权限吗?

(我现在是这么做的:
(1)用sa的帐号登录创建数据库[假设为testdb]、创建一个特殊的login[假设为app_user,默认数据库为testdb];
(2)用sp_grantdbaccess为app_user建立数据库用户;
(3)用sp_addrolemember为app_user赋db_owner角色;
(4)用app_user登录创建表并初始化数据;
(5)客户端运行时先通过app_user登录数据库,再通过我自己的权限管理系统检查,然后正常运行;

这样做合理吗?
pengdali 2003-10-22
  • 打赏
  • 举报
回复
这个系统的所有客户端通过同一个login登录,为这个login赋最大数据库存取权限。

建议你建立一个普通用户,用这个用户建库建表建你要的所有东西,这样你的所有客户端只可以访问这个库中所有东西。
Veeve 2003-10-22
  • 打赏
  • 举报
回复
to: pengdali(大力 V3.0)
“权限设置,我认为你不应该依靠数据库级的权限设置,你的应用最好有自己的权限系统。这样才够灵活。”

事实上正是如你所说,我想不依赖数据库级的权限管理,我打算在我的应用中维护自己的权限系统。
我是这样设想的,这个系统的所有客户端通过同一个login登录,为这个login赋最大数据库存取权限,在这个基础上由我自己的权限系统维护用户的权限。我想弄明白的就是这样做原则上是不是可行?会不会有什么不良影响?正确的做法是否如此?


txlicenhe 2003-10-21
  • 打赏
  • 举报
回复
应该是一样的。
pengdali 2003-10-21
  • 打赏
  • 举报
回复
多个线程,你通过下面查看:


sp_who2
yown 2003-10-21
  • 打赏
  • 举报
回复
创建不同的角色或创建不同的组
zarge 2003-10-21
  • 打赏
  • 举报
回复
建立应用程序安全性和应用程序角色
新增信息 - SQL Server 2000 SP3。

Microsoft® SQL Server™ 中的安全系统在最低级别,即数据库本身上实现。无论使用什么应用程序与 SQL Server 通讯,这都是控制用户活动的最佳方法。但是,有时必须自定义安全控制以适应个别应用程序的特殊需要,尤其是当处理复杂数据库和含有大表的数据库时。

此外,可能希望限制用户只能通过特定应用程序(例如使用 SQL 查询分析器或 Microsoft Excel)来访问数据或防止用户直接访问数据。限制用户的这种访问方式将禁止用户使用应用程序(如 SQL 查询分析器)连接到 SQL Server 实例并执行编写质量差的查询,以免对整个服务器的性能造成负面影响。

SQL Server 通过使用应用程序角色适应这些要求。应用程序角色与标准角色有以下区别:

应用程序角色不包含成员。
不能将 Microsoft Windows NT® 4.0 或 Windows® 2000 组、用户和角色添加到应用程序角色;当通过特定的应用程序为用户连接激活应用程序角色时,将获得该应用程序角色的权限。用户之所以与应用程序角色关联,是由于用户能够运行激活该角色的应用程序,而不是因为其是角色成员。

默认情况下,应用程序角色是非活动的,需要用密码激活。


应用程序角色不使用标准权限。
当一个应用程序角色被该应用程序激活以用于连接时,连接会在连接期间永久地失去数据库中所有用来登录的权限、用户帐户、其它组或数据库角色。连接获得与数据库的应用程序角色相关联的权限,应用程序角色存在于该数据库中。因为应用程序角色只能应用于它们所存在的数据库中,所以连接只能通过授予其它数据库中 guest 用户帐户的权限,获得对另一个数据库的访问。因此,如果数据库中没有 guest 用户帐户,则连接无法获得对该数据库的访问。如果 guest 用户帐户确实存在于数据库中,但是访问对象的权限没有显式地授予 guest,则无论是谁创建了对象,连接都不能访问该对象。用户从应用程序角色中获得的权限一直有效,直到连接从 SQL Server 退出为止。

若要确保可以执行应用程序的所有函数,连接必须在连接期间失去应用于登录和用户帐户或所有数据库中的其它组或数据库角色的默认权限,并获得与应用程序角色相关联的权限。例如,如果应用程序必须访问通常拒绝用户访问的表,则应废除对该用户拒绝的访问权限,以使用户能够成功使用该应用程序。应用程序角色通过临时挂起用户的默认权限并只对他们指派应用程序角色的权限而克服任何与用户的默认权限发生的冲突。

应用程序角色允许应用程序(而不是 SQL Server)接管验证用户身份的责任。但是,SQL Server 在应用程序访问数据库时仍需对其进行验证,因此应用程序必须提供密码,因为没有其它方法可以验证应用程序。

如果不需要对数据库进行特殊访问,则不需要授予用户和 Windows NT 4.0 或 Windows 2000 组任何权限,因为所有权限都可以由它们用来访问数据库的应用程序指派。在这种环境下,假设对应用程序的访问是安全的,则在系统范围内统一使用指派给应用程序角色的密码是可能的。



安全说明 使用应用程序角色时,不能审核单个用户的活动,只能审核应用程序角色的活动。


有几个选项可用于管理应用程序角色密码而不是将其硬编码到应用程序中(不推荐使用)。例如,可以使用存储在注册表(或 SQL Server 数据库)中的加密键,只有应用程序有加密键的解密代码。应用程序读取键,对其进行解密,并使用其值设置应用程序角色。如果使用多协议 Net-Library,则含有密码的网络数据包也可以被加密。另外,当角色被激活时,可以在发送到 SQL Server 实例前将密码加密。

如果应用程序用户使用 Windows 身份验证模式连接到 SQL Server 实例,则在使用应用程序时,可以使用应用程序角色设置 Windows NT 4.0 或 Windows 2000 用户在数据库中拥有的权限。这种方法使得当用户使用应用程序时,对用户帐户的 Windows NT 4.0 或 Windows 2000 审核及对用户权限的控制容易维护。

如果使用 SQL Server 身份验证,并且不要求审核用户在数据库中的访问,则应用程序可以更容易地使用预定义的 SQL Server 登录连接到 SQL Server 实例。例如,订单输入应用程序验证运行该应用程序的用户,然后用相同的 OrderEntry 登录连接到 SQL Server 实例。所有连接都使用同一登录,相关权限授予该登录。



安全说明 应用程序角色可以两种身份验证模式运行。如果可能,请使用 Windows 身份验证。


示例
作为应用程序角色使用的示例,假设用户 Sue 运行销售应用程序,该应用程序要求在数据库 Sales 中的表 Products 和 Orders 上有 SELECT、UPDATE 和 INSERT 权限,但她在使用 SQL 查询分析器或任何其它工具访问 Products 或 Orders 表时不应有 SELECT、INSERT 或 UPDATE 权限。若要确保如此,可以创建一个拒绝 Products 和 Orders 表上的 SELECT、INSERT 或 UPDATE 权限的用户-数据库角色,然后将 Sue 添加为该数据库角色的成员。接着在 Sales 数据库中创建带有 Products 和 Orders 表上的 SELECT、INSERT 和 UPDATE 权限的应用程序角色。当应用程序运行时,它通过使用 sp_setapprole 提供密码激活应用程序,并获得访问 Products 和 Orders 表的权限。如果 Sue 尝试使用除该应用程序外的任何其它工具登录到 SQL Server 实例,则将无法访问 Products 或 Orders 表。
pengdali 2003-10-21
  • 打赏
  • 举报
回复
权限设置,我认为你不应该依靠数据库级的权限设置,你的应用最好有自己的权限系统。这样才够灵活。
Veeve 2003-10-21
  • 打赏
  • 举报
回复
to pengdali(大力 V3.0):我知道你的意思,请问就这点区别吗?我的目的是想应用在我的C/S应用系统中,简化角色、用户、权限的管理,可行吗?
pengdali 2003-10-21
  • 打赏
  • 举报
回复
企业管理器-->你的sqlserver实例-->管理-->当前活动。
Veeve 2003-10-21
  • 打赏
  • 举报
回复
有更具体的看法吗?
Java聊天室程序 需求分析 2.1 业务需求 1. 与聊天室成员一起聊天。 2. 可以与聊天室成员私聊。 3. 可以改变聊天内容风格。 4. 用户注册(含头像)、登录。 5. 服务器监控聊天内容。 6. 服务器过滤非法内容。 7. 服务器发送通知。 8. 服务器踢人。 9. 保存服务器日志。 10.保存用户聊天信息。 2.2 系统功能模块 2.2.1 服务器端 1.处理用户注册 2.处理用户登录 3.处理用户发送信息 4.处理用户得到信息 5.处理用户退出 2.2.2 客户端 1.用户注册界面及结果 2.用户登录界面及结果 3.用户发送信息界面及结果 4.用户得到信息界面及结果 5.用户退出界面及结果 2.3 性能需求 运行环境:Windows 9x、2000、xp、2003,Linux 必要环境:JDK 1.5 以上 硬件环境:CPU 400MHz以上,内存64MB以上 3.1.2 客户端结构 ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。 Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。 Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。 ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java 亲密合作。 Windowclose 为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。 Clock.java 为客户端程序的一个小程序,实现的一个石英钟功能。 3. 2 系统实现原理 当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。 接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是3秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为3秒最佳,因为每个用户都不可能在3秒内连续发送信息。 当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。 4.1.1 问题陈述 1.接受用户注册信息并保存在一个基于文件的对象型数据库。 2.能够允许注册过的用户登陆聊天界面并可以聊天。 3.能够接受私聊信息并发送给特定的用户。 4.服务器运行在自定义的端口上#1001。 5.服务器监控用户列表和用户聊天信息(私聊除外)。 6.服务器踢人,发送通知。 7.服务器保存日志。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧