因为是一台公用服务器机上装了sql server2008,想做到如何才能让其它用户无法登陆sql server.我现在是这么做的:
装完SQL后将sql server登陆模式改为禁用windows登陆,然后将BUILTINA\dministrators 和Administrator 都禁用。只能用sa登陆。 我知道可以通过注册表将登陆模式修改为混全登陆,但不知道有没有办法在没有sa密码的情况下将我禁用的系统帐户启用?如果可以的话话那我做的这两步就没有作用了。请教高手如何才能实现只能让有密码的用户登陆sql server 

解决方案 »

  1.   

    貌似只能做到这一步了。还可以用2008的“透明数据加密”(TDE)加密数据库文件,以防止他人直接使用你的数据库文件
      

  2.   


    忘记说了,tde我也是启用了的。但如果能恢复windows方式验证登陆就可以关闭tde了。
      

  3.   

    如果你将windows帐户都删除或禁用了,他就算改成windows方式验证,也无法登陆SQL.不过,作为一个公用服务器,想绝对的安全是不可能的。
      

  4.   

    有一点是想不通的。一台公用PC,除了重装系统等硬手段,你怎么恢复OS的管理员帐户。
      

  5.   

    如果是XXX,别说登录windows方式验证,倒是怎么先登录OS。
      

  6.   


    我指的删除windows账户是指在sql server里禁用这些账户:
    “装完SQL后将sql server登陆模式改为禁用windows登陆,然后将BUILTINA\dministrators 和Administrator 都禁用”期待高手来指点。
      

  7.   

    lz 这样挡不住 windows 帐户登陆,方法很简单。SQL Server 服务的帐户应该是 windows 帐户吧,并且在 sql server 中不能禁止这个帐户,只要可以以这个 windows 帐户运行 sqlcmd 客户端,不就可以了。
    例如,SQL Server 服务帐户为 system,
    那么只以 administrator 帐户登陆 windows 系统,在命令行中执行 
    psexec.exe -s -d -i sqlcmd.exe,便可以了。还有,将 windows 帐户加入 SQLServerMSSQLUser$NAME$MSSQLSERVER 组,也可以。
      

  8.   


    非常感谢猫兄的回答,我按你说的两个方法反复试过了,都无法进入。我使用的环境是:sqlserver 2008 + windows 2003 server .请问你试了是可以的吗?
      

  9.   

    其实,用Master Key给数据库加密最有效,但是要记得给Master Key备份,并将备份文件放好,以免你自己都不能打开。
      

  10.   

    只要别人有windows管理员帐号,在系统层面你做什么都没有任何用处比如阻止别人登录sqlserver什么的
    你还是在数据库层面上多考虑一下吧,比如用证书非对称密钥等
      

  11.   


    不知道 lz 是怎么做的。我在多台服务器上测试过都可以。SQL Server 安装在 windows 系统上,只有对 windows 系统有完全控制的权限,基本上就可以完全控制 SQL Server。
      

  12.   

    我是在sql server 2008里将系统登陆名禁用了,这里的用户与系统的用户应当不是一回事吧。我只保留了sa的登陆权限 。
    回复Harmony_liu,billpu 我已经启用了tde,但似乎只能保证数据库里的数据不能被其它机器回复。如果别人可以登陆到数据库的话那还是可以修改数据啊。 也许只能将数据库的各个表的内容加密存放,但这么做似乎对效率又有大的影响 。而且程序还要做很大的修改。
    我想实现的功能就是不能修改、不能将我的数据导出。启用了tde似乎可以做到第二步了。第一步怎么保证 ?我的想法是不是只能让用户无法登陆才可以实现?期待猫兄等高手继续指点一二。
      

  13.   

    只要有系统管理员权限用以下办法可以登录你的sqlserver 
    不妨一试
    1 停掉所有sqlserver及相关服务
    2 设置sqlserver启动参数设置单用户启动,服务里加上-m的参数,或者找到sqlserver安装目录,直接在sqlsevr.exe -m
    3 启动另一个cmd窗口(如果刚才你是用命令行方式启动),运行sqlcmd –E
    4 运行
    create login [builtin\administrators] from windows
    go
    exec sp_addsrvrolemember [builtin\administrators], [sysadmin]
    go
    shutdown
    go
    5 重启sqlserver
    然后别人就可以登录了
     
      

  14.   

    玩的优雅点的可以把sp_addsrvrolemember这个系统存储过程删除,不过这个依然没有办法,系统管理员可以把他恢复过来sqlcmd一样
      

  15.   

     不管怎么说,sqlservef只是工作在windows平台的一个软件而已,你不可能凌驾在windows上面来制约他
      

  16.   

    net start mssqlserver -m 这种方式对 sql server 2008 无用。看来 lz 是将服务帐户 system 在 sql server 中也禁用了。
    没有关系,将服务帐户改为 NT AUTHORITY\NETWORK SERVICE,
    用 psexec -i -e -u "NT AUTHORITY\NETWORK SERVICE" sqlcmd 一样 ok。