在SQL Server中使用别名用户时的安全问题

发表于:2009-3-09 11:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:唐小若    来源:IT专家网

  问题:SQL Server有很多很好用的小功能,但是有时候这些功能反过来给你制造麻烦。其中一个这样的问题是别名用户的使用。本技巧教你如何在数据库中建立别名用户时找到安全漏洞,不过在SQL Server 2008种不推荐这个功能。

  首先,你可以对每个数据库运行下面的简单查询或者针对所有数据库操作它来运行以便找到带有"dbo"访问权限的用户。

  SELECT DISTINCT DB_NAME() DATABASE_NAME,

  SU.NAME DATABASE_USERNAME

  FROM SYSUSERS SU

  JOIN SYSMEMBERS SM

  ON SM.MEMBERUID = SU.UID

  INNER JOIN SYSMEMBERS SM1

  ON SM.MEMBERUID = SM1.MEMBERUID

  INNER JOIN SYSUSERS SU1

  ON SM1.GROUPUID = SU1.UID

  AND SU1.NAME = 'db_owner'

  AND SU.NAME <> 'dbo'

  但是,此查询可能不能找到所有具有"dbo"访问权限的用户,因为SQL Server 中的一个安全漏洞。让我来解释这个问题。

  让我们创建两个登录,AliasUser1和DBUser1。

  别名AliasUser1分配给"dbo"角色。

  把用户DBUser1添加到角色"dbo"中,如果我们需要把"dbo"权限授给一个数据库用户,那么这是一种很正常的行为。

  下面的脚本将为我们做这些动作:

  IF NOT EXISTS (SELECT *

  FROM SYS.SERVER_PRINCIPALS

  WHERE NAME = N'AliasUser1')

  CREATE LOGIN [AliasUser1]

  WITH PASSWORD=N'test', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english],

  CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

  GO

  IF NOT EXISTS (SELECT *

  FROM SYS.SERVER_PRINCIPALS

  WHERE NAME = N'DBUser1')

  CREATE LOGIN [DBUser1]

  WITH PASSWORD=N'test', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english],

  CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

  GO

  --add a aliased user with dbo priveleges

  exec sp_addalias 'AliasUser1','dbo'

  --add a regular db user to the dbo role

  CREATE USER [DBUser1] FOR LOGIN [DBUser1]

  GO

  EXEC sp_addrolemember N'db_owner', N'DBUser1'

  GO

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号