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

柒柒皮草专卖

柒柒皮草专卖

2016-02-19 13:51

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的在SQL Server中使用别名用户的安全问题懂设计的网友们快点来了解吧!

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

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

  SELECT DISTINCT DB_NAME() DATABASE_NAME,

  SU.NAME DATABASE_USERNAME

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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 *

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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 *

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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]

  现在,让我们从SSMS中检验我们刚创建的用户。注意,我们别名到“dbo”中的“AliasUser1”没有在用户下面出现。SQL Server没有在“用户”列表中显示别名用户。

图一 SSMS中的数据库用户

  那么我们要如何找到一个数据库中的别名用户呢?执行下面的查询:

  select * from sys.sysusers

  在下面的结果集中,我们看到“AliasUser1”前面有一个“”,如果我们检查字段“isaliased”,在右边的第三个字段,那么它有一个为1的值。

图二 图三 sys.sysusers

  下面的命令也能运行来显示所有的用户和别名。在下面的输出结果中,你可以看到别名用户“AliasUser1”没有作为一个用户出现,但是在第二个结果集中它作为一个别名用户出现。

  exec sp_helpuser

图四 sp_helpuser

  另一个需要注意的有趣之处是,你不能使用sp_dropuser存储过程来删除一个别名用户,相反,要使用sp_dropalias来删除。

  通过一个登录使用一个到“dbo”的别名,这将让你完全访问自己的数据库,例如一个db_owner.不足之处是在SSMS中没有一个地方可以看到这个过程。你可以自己尝试。在其中一个你自己数据库中按照下面的步骤,然后使用登录“AliasUser1”和密码“test”,你可以看到该登录可以在你创建别名的数据库中进行任何它想要的行为。

  下一步骤

  针对你的数据库运行sp_helpuser,看看你是否建立了别名。

  如果有别名用户具有“dbo”级别的权限,那么看看删除这些并使用下面所述的角色。

  这个别名功能被微软阻止了很长一段时间,但是它仍然在2005中使用。我认为这是基于向后兼容的考虑。该功能在SQL 2008中取消了。

  因此,如果你的应用程序正在使用别名,而它在SQL 2008中不能使用,那么使用上面提到的不同方法试试。

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
在SQL Server中使用别名用户的安全问题

Microsoft SQL Server 安全问题

编程语言 网络编程
Microsoft SQL Server 安全问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Microsoft SQL Server 7.0安全问题

电脑网络
Microsoft SQL Server 7.0安全问题

在SQL Server 中使用SQLDMO

SQLServer
在SQL Server 中使用SQLDMO

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

关于SQL SERVER的一些安全问题

SQLServer
关于SQL SERVER的一些安全问题

IIS中SQL Server数据库的安全问题

SQLServer
IIS中SQL Server数据库的安全问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

QQ空间打开后跳到其它网站怎么办?

QQ空间打开后跳到其它网站怎么办?

如何把旧Macbook Pro/Air的F4键改为LaunchPad快捷键

如何把旧Macbook Pro/Air的F4键改为LaunchPad快捷键
下拉加载更多内容 ↓