好贷网好贷款

十万火急!关于权限问题! 80CSDN]

发布时间:2016-12-4 5:54:05 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"十万火急!关于权限问题! 80CSDN]",主要涉及到十万火急!关于权限问题! 80CSDN]方面的内容,对于十万火急!关于权限问题! 80CSDN]感兴趣的同学可以参考一下。

现有一数据库,其中表A中有大量数据,表A中有字段"地区",存放的是地区名,现有各地区的用户要连接该数据库,问,有没有方法通过设置权限来限制各地区的用户只能访问表A中属于自己地区的数据! 非常急!因为程序不能修改,所以只有考虑用sql sever中的权限设置! 强高手指教!

不能,还是要在程序里做

不改程序基本上无法实现: 不改程序意味着不能改对数据库的访问方式, 只能在数据库中去判断登录用户的身份 但这样有一个问题,如果你的程序是直接访问表或者视图的,根本不通过存储过程,那么只有对登录sql的登录做权限控制,但这样更大的问题是,SQL根本不运行行级(记录级)的权限控制

sql 2005的加密使得你可以实现记录级的安全控制,但这得程序在访问上做配全。

-- http://www.sql-club.com/net2004/archive/2005/09/13/189.aspx SQL Server 2005加密解密  数据安全是企业级应用极为重要的保证,伴随着微软“可信赖计算”计划的实施,SQL Server 2005 中加入了非常丰富的安全特性,SQL Server 2005将提供极为严密的全新安全性。微软公司提出了“可信赖计算”计划,旨在提高安全性、私密性、可靠性和业务完整性。 “可信赖计算”详细描述了支持安全计算的必要步骤和部署及维护一个安全环境的有益措施的框架。这些步骤可以在软件生命周期的每一阶段——从设计、发布到维护,保护您的系统和数据的机密性、完整性和可用性。   Data Encryption and Key Management  SQL Server 同样提供了对称加密和非对称加密,如下例所示(由于密钥的关系,不同的人看到的同一个表的容也是不一样的): CREATE DATABASE DEMO; GO USE DEMO; GO --the database master key is always encrypted (using triple_DES--3DES) with user-supplier password --stored in the sys.symmetric_keys; and at the same time using service master key to encrypt --the database master key and stored in sys.databases table CREATE MASTER KEY  ENCRYPTION BY PASSWORD='23987hxJKL95QYV4369#ghf0%94467GRdkjuw54ie5y01478dDkjdahflkujaslekjg5k3fd117r$$#1946kcj$n44ncjhdlj' GO CREATE TABLE  EMPLOYEE  (  EmployeeID INT PRIMARY KEY , FULLNAME VARCHAR(100), SALARY INT, ENCRYPTSALARY VARBINARY(4000) ) USE MASTER; GO --由于CHECK_POLICY默认情况下是打开的,但是我要使用简单的密码,所以我显示的关闭它 --CHECK_POLICY=OFF CREATE LOGIN DAVID01 WITH PASSWORD='DAVID01' , CHECK_POLICY=OFF CREATE LOGIN DAVID02 WITH PASSWORD='DAVID02', CHECK_POLICY=OFF USE DEMO; GO --在数据库DEMO级别为DAVID01创建用户并授予权限 CREATE USER DAVID01 FOR LOGIN DAVID01 GRANT SELECT,INSERT,UPDATE  ON EMPLOYEE TO DAVID01 --在数据库DEMO级别为DAVID02创建用户并授予权限 CREATE USER DAVID02 FOR LOGIN DAVID02 GRANT SELECT,INSERT,UPDATE ON EMPLOYEE TO DAVID02 --创建一个证书,指定证书的所有者 CREATE CERTIFICATE CER_SK_David01 AUTHORIZATION David01 WITH SUBJECT ='CERTIFICATE FOR ACCESS SYMMETRIC KEYS -FOR USE BY David01' --创建一个证书,指定证书的所有者 CREATE CERTIFICATE CER_SK_David02 AUTHORIZATION David02 WITH SUBJECT ='CERTIFICATE FOR ACCESS SYMMETRIC KEYS -FOR USE BY David02' --创建对称密钥 CREATE SYMMETRIC KEY SK_EMPLOYEES_David01 AUTHORIZATION David01 WITH ALGORITHM=AES_192  ENCRYPTION BY CERTIFICATE CER_SK_David01 --创建对称密钥 CREATE SYMMETRIC KEY SK_EMPLOYEES_David02 AUTHORIZATION David02 WITH ALGORITHM=AES_192  ENCRYPTION BY CERTIFICATE CER_SK_David02 --指定下面的语句在David01的上下文下运行 exec as login='David01'  OPEN SYMMETRIC KEY SK_EMPLOYEES_DAVID01 DECRYPTION BY CERTIFICATE CER_SK_DAVID01 INSERT INTO EMPLOYEE VALUES(1,'DAVIDDONG','10000',ENCRYPTBYKEY(KEY_GUID('SK_EMPLOYEES_David01'),'10000')); INSERT INTO EMPLOYEE VALUES(2,'DAVIDDONG','12000',ENCRYPTBYKEY(KEY_GUID('SK_EMPLOYEES_David01'),'12000')); INSERT INTO EMPLOYEE VALUES(3,'DAVIDDONG','15000',ENCRYPTBYKEY(KEY_GUID('SK_EMPLOYEES_David01'),'15000')); SELECT EMPLOYEEID,SALARY,CONVERT(VARCHAR(1000),DECRYPTBYKEY(ENCRYPTSALARY)) AS SALARY1  FROM EMPLOYEE CLOSE ALL SYMMETRIC KEYS REVERT--返回初始登录的用户上下文 SELECT EMPLOYEEID,SALARY,CONVERT(VARCHAR(1000),DECRYPTBYKEY(ENCRYPTSALARY)) AS SALARY1  FROM EMPLOYEE EXECUTE AS LOGIN='DAVID02' OPEN SYMMETRIC KEY SK_EMPLOYEES_DAVID02 DECRYPTION BY CERTIFICATE CER_SK_DAVID02 ----- INSERT INTO EMPLOYEE VALUES(4,'DAVIDDONG','10000',ENCRYPTBYKEY(KEY_GUID('SK_EMPLOYEES_David02'),'10000')); INSERT INTO EMPLOYEE VALUES(5,'DAVIDDONG','12000',ENCRYPTBYKEY(KEY_GUID('SK_EMPLOYEES_David02'),'12000')); INSERT INTO EMPLOYEE VALUES(6,'DAVIDDONG','15000',ENCRYPTBYKEY(KEY_GUID('SK_EMPLOYEES_David02'),'15000')); SELECT EMPLOYEEID,SALARY,CONVERT(VARCHAR(1000),DECRYPTBYKEY(ENCRYPTSALARY)) AS SALARY1  FROM EMPLOYEE CLOSE ALL SYMMETRIC KEYS REVERT SELECT EMPLOYEEID,SALARY,CONVERT(VARCHAR(1000),DECRYPTBYKEY(ENCRYPTSALARY)) AS SALARY1  FROM EMPLOYEE

向各们学习~

有两个方法。 一、如果允许做小小的改动,可以把访问table改成访问table valued function,在table valued function中先验证权限 二、如果一点都不允许,那么可以把table分成不同的partition,各partition可以map到不同的shema,schema可以设置权限。

athossmth: 能具体一点吗!

有高手能帮我吗! 需要通过sql权限设置来限制用户对表中数据内容的访问

怎么没人帮我呀

已经很具体了吧,总不能帮你写程序阿

用函数或存储过程实现

sql中能实现你说需要的功能 每一个表都有权限的控制 microsoft在这个上面做得不错

上一篇:简单问题,却是疑难解决,请高高手们,帮帮忙吧,解决必重谢. 100CSDN]
下一篇:sql server 2005里的web services只能返回记录集?这么笨啊 8qcrsoft]

相关文章

相关评论