`
收藏列表
标题 标签 来源
shiro
http://kdboy.iteye.com/blog/1103794
maven3初探 少走弯路就是走捷径 一次只做一件事情 晚上睡觉不要想太多 http://www.cnblogs.com/Knuth/archive/2012/05/13/2498166.html

        
StringUtils中 isNotEmpty 和isNotBlank的区别 java
isNotEmpty将空格也作为参数,isNotBlank则排除空格参数
参考
Quote 
StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出NullPointerException,而是做了相应处理,例如,如果输入为null则返回也是null等,具体可以查看源代码)。
除了构造器,StringUtils中一共有130多个方法,并且都是static的,所以我们可以这样调用StringUtils.xxx()
1. public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是str==null或str.length()==0
下面是StringUtils判断是否为空的示例:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在StringUtils中空格作非空处理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字符串是否非空,等于!isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字符串是否为空或长度为0或由空白符(whitespace)构成
下面是示例:
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符StringUtils.isBlank()均识为空白符
StringUtils.isBlank("\b") = false //"\b"为单词边界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成,等于!isBlank(String str)
下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
其他方法介绍:
5. public static String trim(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果输入为null则返回null
下面是示例:
StringUtils.trim(null) = null
StringUtils.trim("") = ""
StringUtils.trim(" ") = ""
StringUtils.trim(" \b \t \n \f \r ") = ""
StringUtils.trim(" \n\tss \b") = "ss"
StringUtils.trim(" d d dd ") = "d d dd"
StringUtils.trim("dd ") = "dd"
StringUtils.trim(" dd ") = "dd"
6. public static String trimToNull(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果变为null或"",则返回null
下面是示例:
StringUtils.trimToNull(null) = null
StringUtils.trimToNull("") = null
StringUtils.trimToNull(" ") = null
StringUtils.trimToNull(" \b \t \n \f \r ") = null
StringUtils.trimToNull(" \n\tss \b") = "ss"
StringUtils.trimToNull(" d d dd ") = "d d dd"
StringUtils.trimToNull("dd ") = "dd"
StringUtils.trimToNull(" dd ") = "dd"
7. public static String trimToEmpty(String str)
去掉字符串两端的控制符(control characters, char <= 32),如果变为null或"",则返回""
下面是示例:
StringUtils.trimToEmpty(null) = ""
StringUtils.trimToEmpty("") = ""
StringUtils.trimToEmpty(" ") = ""
StringUtils.trimToEmpty(" \b \t \n \f \r ") = ""
StringUtils.trimToEmpty(" \n\tss \b") = "ss"
StringUtils.trimToEmpty(" d d dd ") = "d d dd"
StringUtils.trimToEmpty("dd ") = "dd"
StringUtils.trimToEmpty(" dd ") = "dd"
8. public static String strip(String str)
去掉字符串两端的空白符(whitespace),如果输入为null则返回null
下面是示例(注意和trim()的区别):
StringUtils.strip(null) = null
StringUtils.strip("") = ""
StringUtils.strip(" ") = ""
StringUtils.strip(" \b \t \n \f \r ") = "\b"
StringUtils.strip(" \n\tss \b") = "ss \b"
StringUtils.strip(" d d dd ") = "d d dd"
StringUtils.strip("dd ") = "dd"
StringUtils.strip(" dd ") = "dd"
9. public static String stripToNull(String str)
去掉字符串两端的空白符(whitespace),如果变为null或"",则返回null
下面是示例(注意和trimToNull()的区别):
StringUtils.stripToNull(null) = null
StringUtils.stripToNull("") = null
StringUtils.stripToNull(" ") = null
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
10. public static String stripToEmpty(String str)
去掉字符串两端的空白符(whitespace),如果变为null或"",则返回""
下面是示例(注意和trimToEmpty()的区别):
StringUtils.stripToNull(null) = ""
StringUtils.stripToNull("") = ""
StringUtils.stripToNull(" ") = ""
StringUtils.stripToNull(" \b \t \n \f \r ") = "\b"
StringUtils.stripToNull(" \n\tss \b") = "ss \b"
StringUtils.stripToNull(" d d dd ") = "d d dd"
StringUtils.stripToNull("dd ") = "dd"
StringUtils.stripToNull(" dd ") = "dd"
jdk 环境变量的设置 java
1.打开我的电脑--属性--高级--环境变量 

2.新建系统变量JAVA_HOME 和CLASSPATH 
变量名:JAVA_HOME 
变量值:C:\Program Files\Java\jdk1.7.0
变量名:CLASSPATH 
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

3. 选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。 
变量名:Path 
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
这是java的环境配置,配置完成后直接启动eclipse,它会自动完成java环境的配置
Java中String的split()方法的一些疑问和试验 oracle, js
Java代码  
public String[] split(String regex, int limit)  
 split函数是用于使用特定的切割符(regex)来分隔字符串成一个字符串数组,这里我就不讨论第二个参数(可选)的含义详见官方API说明
 
我在做项目期间曾经遇到一个“bug”,就是当split函数处理空字符串时,返回数组的数组竟然有值。。。查完API才发现就是这么规定的。
官方API 写道
If the expression does not match any part of the input then the resulting array has just one element, namely this string.
 原来我不能小看空字符串,它也是字符串的一种,当split函数没有发现匹配的分隔符时,返回数组就只包含一个元素(该字符串本身)。以为这样就结束了,幸亏我做了几个试验,忽然又发现了一些问题,代码如下:
Java代码  
public class Split {  
  
    public static void main(String[] args) {  
        String str1 = "a-b";          
        String str2 = "a-b-";  
        String str3 = "-a-b";  
        String str4 = "-a-b-";  
        String str5 = "a";  
        String str6 = "-";  
        String str7 = "--";  
        String str8 = "";   //等同于new String()  
          
        getSplitLen(str1);  
        getSplitLen(str2);  
        getSplitLen(str3);  
        getSplitLen(str4);  
        getSplitLen(str5);  
        getSplitLen(str6);  
        getSplitLen(str7);  
        getSplitLen(str8);  
    }  
      
    public static void getSplitLen(String demo){  
        String[] array = demo.split("-");  
        int len = array.length;  
        System.out.print("\"" + demo + "\"长度为:" + len);  
        if(len >= 0){  
            for(int i=0; i<len; i++){  
                System.out.print(" \""+array[i]+"\"");  
            }             
        }  
        System.out.println();  
    }  
  
}  
 运行结果:
"a-b"长度为:2 "a" "b"
"a-b-"长度为:2 "a" "b"
"-a-b"长度为:3 "" "a" "b"
"-a-b-"长度为:3 "" "a" "b"
"a"长度为:1 "a"
"-"长度为:0
"--"长度为:0
""长度为:1 ""
 
和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下:
当字符串只包含分隔符时,返回数组没有元素;
当字符串不包含分隔符时,返回数组只包含一个元素(该字符串本身);
字符串最尾部出现的分隔符可以看成不存在,不影响字符串的分隔;
字符串最前端出现的分隔符将分隔出一个空字符串以及剩下的部分的正常分隔;
 
javascript也有split()函数,我想应该也是类似的,还没有来得及尝试。
menu.js
/**
 * @author peng.yu
 */
//导航数组
var navigationArray = new Array();
//标志点击哪一级菜单
var navigationFlag; 
//设置点击一级菜单样式
function setMenuStyle(index,number){
	navigationFlag = false;
	var menuArray = new Array();
	var linkUrl = new Array();
	switch(index){
		case 0:
			navigationArray[0] = "贷款申请";
			
			menuArray = DQSQMenuArray;
			linkUrl = DQSQMenuLinkUrl;
			break;
		case 1:
			navigationArray[0] = "申请特殊处理";
			menuArray = SQTSCLMenuArray;
			linkUrl = SQTSCLMenuLinkUrl;
			break;
		case 2:
			navigationArray[0] = "委托提取申请";
			menuArray = WTSQMenuArray;
			linkUrl = WTSQMenuLinkUrl;
			break;
		case 3:
			navigationArray[0] = "委托提取变更申请";
			menuArray = BGSQMenuArray;
			linkUrl = BGSQMenuLinkUrl;
			break;
		case 4:
			navigationArray[0] = "还款";
			menuArray = HKMenuArray;
			linkUrl = HKMenuLinkUrl;
			break;
		case 5:
			navigationArray[0] = "月末处理";
			menuArray = YMCLMenuArray;
			linkUrl = YMCLMenuLinkUrl;
			break;
		case 6:
			navigationArray[0] = "贷款预算";
			menuArray = YSMenuArray;
			linkUrl = YSMenuLinkUrl;
			break;
		case 7:
			navigationArray[0] = "贷款查询";
			menuArray = CXMenuArray;
			linkUrl = CXMenuLinkUrl;			
			break;
		case 8:
			navigationArray[0] = "系统维护";
			menuArray = XTWHMenuArray;
			linkUrl = XTWHMenuLinkUrl;
			break;
	    case 9:
			navigationArray[0] = "交行特殊功能";
			menuArray = JHMenuArray;
			linkUrl = JHMenuLinkUrl;
			break;
		default: break;
	}
	var div = document.getElementsByTagName("div");
	
	
	for(var i = 0; i < div.length; ++i){
		if(i == number){
			div[number].className = "MheadMenuActive";
			div[number].className = "headMenuActive";
		}else{
			div[i].className = "";
		}
	}
	setNavigation();
	setSecondMenu(menuArray,linkUrl);
}

//设置点击一级菜单对应显示的二级菜单
function setSecondMenu(menuArray,linkUrl){
	var table = document.getElementById("menuContainer");
    	if(table.rows.length > 0){
	    	for(var i = 0; i < table.rows.length; ++i){
	    		table.deleteRow(table.rows[i]);
	    	}
    	}
    	var newLine = table.insertRow();
    	var cells = new Array();
    	for(var i = 0 ; i < linkUrl.length ; i++) {
    		cells[i] = newLine.insertCell();
    		cells[i].align = "center";
				cells[i].valign = "middle";
				cells[i].nowrap = "nowrap";
    	}
		addMenu(cells,menuArray,linkUrl);
}	
//显示二级菜单
function addMenu(cells,menuArray,linkUrl){
	for(var i = 0; i < menuArray.length; ++i){
	    if(i < menuArray.length - 1){
			cells[i].innerHTML = "<a href='" + linkUrl[i] + "' style=CURSOR:hand' onclick=setStyle(this,'" + menuArray[i] + "') class='menuLink'  target='workSpace' id='onLoad'>" 
				+ menuArray[i] + "│</a> ";
		}else{
			cells[i].innerHTML = "<a href='" + linkUrl[i] + "' style=CURSOR:hand' onclick=setStyle(this,'" + menuArray[i] + "') class='menuLink'  target='workSpace'>" 
				+ menuArray[i]  + "</a>";
		}
	}
}
//设置二级菜单选中状态
function setStyle(obj,context){
	obj.onfocus = function(){this.blur()};
    var a = document.getElementsByTagName("a");
    for(var i = 0; i < a.length; ++i){
    	if(a[i].id == "fhzy"){
    		a[i].className = "headLink";
    	}else{
    		a[i].className = "menuLink";
    	}
    }
	navigationFlag = true;
	navigationArray[1] = context;
	setNavigation();
	obj.className = "childMenuActive clearALink";
}
//设置点击一级与二级菜单导航栏文字
function setNavigation(){
	var navigation = document.getElementById("navigation");
	navigation.innerHTML = "";
	if(navigationFlag){
		navigation.innerHTML = "   <img src='images\\public\\navigation_icon.gif' border='0'/> 当前位置:"+ navigationArray[0] + "--" + navigationArray[1];
		document.getElementById("menu1").value=navigationArray[0];
		document.getElementById("menu2").value=navigationArray[1];
	}else{
		navigation.innerHTML = "   <img src='images\\public\\navigation_icon.gif' border='0'/> 当前位置:"+ navigationArray[0];
	}
}
//设置点击toolBar中的按钮将文字加入导航栏
function addNavigation(toolBarContext){
	top.frames.top1.navigation.innerHTML = "   <img src='images\\public\\navigation_icon.gif' border='0'/> 当前位置:"+ top.frames.top1.menu1.value + "--" + top.frames.top1.menu2.value + "--" + toolBarContext;
}

//判断输入字符串长度
function getLength(str){
 	return str.replace(/[^\x00-\x99]/g,'**').length;
}
//判断是否有特殊字符输入
    function zzbds_forpage(textva){
		var repex_page = /^[^(\<\>\\\"\']+$/ ;
		if(!repex_page.test(textva)){
			return true;
		}else{
		    return false;
		}
	}
//设置主框架top帧高度
/*function setFrameSetHeight(){
	var frame = parent.document.getElementById("frame");
	frame.rows = "120,*,24";
}*/
//判断是否是数值型
  var testNumber=/^(-?[1-9][0-9]*|0|-?[1-9][0-9]*\.[0-9]+|-?0\.[0-9]+)$/;
//判断数字格式
	function checkNUM(NUM){
	    var i,j,strTemp;
	    strTemp="0123456789";
    	if ( NUM.length== 0)
        	return 0
    	for (i=0;i<NUM.length;i++){
        	j=strTemp.indexOf(NUM.charAt(i));
	        if (j==-1) {
	            return 0;
	        }
    	}
    	return 1;
	}
	
	//判断是否为润年
	function isSmoothYear(year){
		return (new Date(year , 2 , 0).getDate() == 29);
	}
	
	//判断日期格式
	function isDate(dateValue){
	    var arr = dateValue.split("-");
	    if(arr.length == 1){
	    	if(checkNUM(midtrim(arr[0])) == 0){
	    		return false;
	    	}else if(midtrim(arr[0]).length == 6){
	    	    if(midtrim(arr[0]).substr(4) == 0 || 
	    	       midtrim(arr[0]).substr(4,2) > 12){
	    	           return false;
	    	    }
	    	    return true;
	    	}else if(midtrim(arr[0]).length == 8){
	    	    if(midtrim(arr[0]).substr(0,4) > 2050 ||
	    	       midtrim(arr[0]).substr(0,4) < 1950){
	    	    	return false;   
	    	    }else if(midtrim(arr[0]).substr(4,2) > 12 ||
	    	    	     midtrim(arr[0]).substr(4,2) == 0){
	    	    	return false;	     
	    	    }else if(midtrim(arr[0]).substr(4,2) == 1 || 
	    	    	midtrim(arr[0]).substr(4,2) == 3 || 
	    	    	midtrim(arr[0]).substr(4,2) == 5 || 
	    	    	midtrim(arr[0]).substr(4,2) == 7 ||
	    	    	midtrim(arr[0]).substr(4,2) == 8 ||
	    	    	midtrim(arr[0]).substr(4,2) == 10 ||
	    	    	midtrim(arr[0]).substr(4,2) == 12 ){
	    	        if(midtrim(arr[0]).substr(6,2) > 31 || 
	    	        	midtrim(arr[0]).substr(6,2) == 0){
	    	        	return false;
	    	        }
	    	        return true;
	    	    }else if(midtrim(arr[0]).substr(4,2) == 4 || 
	    	    	midtrim(arr[0]).substr(4,2) == 6 || 
	    	    	midtrim(arr[0]).substr(4,2) == 9 || 
	    	    	midtrim(arr[0]).substr(4,2) == 11){
	    	        if(midtrim(arr[0]).substr(6,2) > 30 || 
	    	        	midtrim(arr[0]).substr(6,2) == 0){
	    	        	return false;
	    	        }
	    	        return true;
	    	    }else if(isSmoothYear(midtrim(arr[0]).substr(0,4))){
		    	    if(midtrim(arr[0]).substr(4,2) == 2){
		    	        if(midtrim(arr[0]).substr(6,2) == 0 ||
		    	           midtrim(arr[0]).substr(6,2) > 29){
		    	           return false;
		    	        }
		    	        return true;
		    	    }
	    		}else if(!isSmoothYear(midtrim(arr[0]).substr(0,4))){
		    	    if(midtrim(arr[0]).substr(4,2) == 2){
		    	        if(midtrim(arr[0]).substr(6,2) == 0 ||
		    	           midtrim(arr[0]).substr(6,2) > 28){
		    	           return false;
		    	        }
		    	        return true;
		    	    }
	    		}
	    		return true;
	    	}
	    	return false;
	    }else{
			if(arr.length != 3){
			   return false;
			}else if(midtrim(arr[0]).length != 4){
				return false;
			}else if(checkNUM(midtrim(arr[0])) == 0){
				return false;
			}else if(midtrim(arr[0]) < 1950 ||
					 midtrim(arr[0]) > 2050){
				return false;
			}else if(midtrim(arr[1]).length > 2){
			    return false;
		  	}else if(midtrim(arr[1]).length < 2){
			    return false;
		  	}else if(checkNUM(midtrim(arr[1])) == 0){
		  		return false;
		  	}else if(midtrim(arr[1]) == 0 ||
		  	         midtrim(arr[1]) > 12){
		  		return false;
		  	}else if(midtrim(arr[2]).length > 2){
			    return false;
		  	}else if(midtrim(arr[2]).length < 2){
			    return false;
		  	}else if(checkNUM(midtrim(arr[2])) == 0){
		  		return false;
		  	}else if(midtrim(arr[1]) == 1 ||
		  	         midtrim(arr[1]) == 3 ||
		  	         midtrim(arr[1]) == 5 ||
		  	         midtrim(arr[1]) == 7 ||
		  	         midtrim(arr[1]) == 8 ||
		  	         midtrim(arr[1]) == 10 ||
		  	         midtrim(arr[1]) == 12){
		  		if(midtrim(arr[2]) == 0 ||
		  		   midtrim(arr[2]) > 31){
		  			return false;
		  		}   
		  		return true;      
		  	}else if(midtrim(arr[1]) == 4 ||
		  	         midtrim(arr[1]) == 6 ||
		  	         midtrim(arr[1]) == 9 ||
		  	         midtrim(arr[1]) == 11){
		  		if(midtrim(arr[2]) == 0 ||
		  		   midtrim(arr[2]) > 30){
		  			return false;
		  		} 
		  		return true;
		  	}else if(isSmoothYear(midtrim(arr[0]))){
		  	    if(midtrim(arr[2]) == 0 ||
		  		   midtrim(arr[2]) > 29){
		  			return false;
		  		} 
		  		return true;
		  	}else if(!isSmoothYear(midtrim(arr[0]))){
		  	    if(midtrim(arr[2]) == 0 ||
		  		   midtrim(arr[2]) > 28){
		  			return false;
		  		} 
		  		return true;
		  	}
		  	return true;
		  
	  	}
	} 
	//判断实数中整数位与小数位是否合法
	function isNumber(numberValue,i,j){
	    var tempNumber;
	    var num;
	    if(numberValue.indexOf("-") == 0){
	    	tempNumber = numberValue.split("-")[1];
	    	num = tempNumber.split(".");
	    }else{
			num = numberValue.split(".");
		}
		if(num.length == 1){
		    if(checkNUM(num[0]) == 0){
		        return false;
		    }else if(midtrim(num[0]).length > i){
		        return false;
		    }else{
		        return true;
		    }
		}else if(num.length > 2){
		    return false;
		}else{
			if(checkNUM(num[0]) == 0){
				return false;
			}else if(num[0].length > i){
			    return false;
			}else if(checkNUM(num[1]) == 0){
				return false;
			}else if(num[1].length > j){
			    return false;
			}else {
				return true;
			}
		} 
	}
	
	//去掉前后空格
  function midtrim(s){
 	  return s.replace(/(\s|u3000)/g,"");
  }
网页走动着的表 js
<html>
  <body>
  <form>
  <input type="text" id="clock" size="35" />
  <script language=javascript>
  var int=self.setInterval("clock()",50)
  function clock(){var t=new Date()
  document.getElementById("clock").value=t
  }
  </script>
  </form>
  <button onclick="int=window.clearInterval(int)">Stop interval</button>
  </body>
  </html>
Oracle用户、权限、角色管理 oracle Oracle用户、权限、角色管理
Oracle 权限设置
一、权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
 
二、系统权限管理:
1、系统权限分类:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
 
2、系统权限授权命令:
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查询用户拥有哪里权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
删除用户:SQL> drop user 用户名 cascade;  //加上cascade则将用户连同其创建的东西全部删除
 
3、系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL> grant connect, resorce to user50 with admin option;  //可以传递所获权限。
 
4、系统权限回收:系统权限只能由DBA用户回收
命令:SQL> Revoke connect, resource from user50;
 
说明:
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
 
三、实体权限管理
1、实体权限分类:select, update, insert, alter, index, delete, all  //all包括所有权限
execute  //执行存储过程权限
user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。

2. 将表的操作权限授予全体用户:
SQL> grant all on product to public;  // public表示是所有的用户,这里的all权限不包括drop。
[实体权限数据字典]:
SQL> select owner, table_name from all_tables; // 用户可以查询的表
SQL> select table_name from user_tables;  // 用户创建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs;   // 授出权限的表(授出的权限)
 
3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
DBA用户:
SQL> Create table stud02.product(
 id number(10),
 name varchar2(20));
SQL> drop table stud02.emp;
SQL> create table stud02.employee
 as
 select * from scott.emp;
 
4. 实体权限传递(with grant option):
user01:
SQL> grant select, update on product to user02 with grant option; // user02得到权限,并可以传递。
 
5. 实体权限回收:
user01:
SQL>Revoke select, update on product from user02;  //传递的权限将全部丢失。
 
说明
1)如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
 
 
Oracle 用户管理
一、创建用户的Profile文件
SQL> create profile student limit  // student为资源文件名
 FAILED_LOGIN_ATTEMPTS  3  //指定锁定用户的登录失败次数
 PASSWORD_LOCK_TIME 5  //指定用户被锁定天数
 PASSWORD_LIFE_TIME 30  //指定口令可用天数
 
二、创建用户
SQL> Create User username
 Identified by password
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
例:
SQL> Create user acc01
 identified by acc01   // 如果密码是数字,请用双引号括起来
 default tablespace account
 temporary tablespace temp
 profile default
 quota 50m on account;
SQL> grant connect, resource to acc01;
[*] 查询用户缺省表空间、临时表空间
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
[*] 查询系统资源文件名:
SQL> select * from dba_profiles;
资源文件类似表,一旦创建就会保存在数据库中。
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
SQL> create profile common limit
 failed_login_attempts 5
 idle_time 5;
 
SQL> Alter user acc01 profile common;
 
三、修改用户:
SQL> Alter User 用户名
 Identified 口令
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
 
1、修改口令字:
SQL>Alter user acc01 identified by "12345";
2、修改用户缺省表空间:
SQL> Alter user acc01 default tablespace users;
3、修改用户临时表空间
SQL> Alter user acc01 temporary tablespace temp_data;
4、强制用户修改口令字:
SQL> Alter user acc01 password expire;
5、将用户加锁
SQL> Alter user acc01 account lock;  // 加锁
SQL> Alter user acc01 account unlock;  // 解锁
 
四、删除用户
SQL>drop user 用户名;  //用户没有建任何实体
SQL> drop user 用户名 CASCADE;  // 将用户及其所建实体全部删除
*1. 当前正连接的用户不得删除。

五、监视用户:
1、查询用户会话信息:
SQL> select username, sid, serial#, machine from v$session;
2、删除用户会话信息:
SQL> Alter system kill session 'sid, serial#';
3、查询用户SQL语句:
SQL> select user_name, sql_text from v$open_cursor;
 
 
Oracle 角色管理
一、何为角色
  角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。

二、系统预定义角色
  预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。
 
2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些角色主要用于访问数据字典视图和包。
 
3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个角色用于数据导入导出工具的使用。
 
4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个角色用于oracle高级查询功能。
 
5. SNMPAGENT
用于oracle enterprise manager和Intelligent Agent
 
6.RECOVERY_CATALOG_OWNER
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》
 
7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
 
三、管理角色
1.建一个角色
sql>create role role1;

2.授权给角色
sql>grant create any table,create procedure to role1;

3.授予角色给用户
sql>grant role1 to user1;

4.查看角色所包含的权限
sql>select * from role_sys_privs;

5.创建带有口令以角色(在生效带有口令的角色时必须提供口令)
sql>create role role1 identified by password1;

6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;

7.设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用带有口令的role1生效
sql>set role all;//使用该用户的所有角色生效
sql>set role none;//设置所有角色失效
sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。

8.修改指定用户,设置其默认角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
详见oracle参考文档

9.删除角色
sql>drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
 
说明:
1)无法使用WITH GRANT OPTION为角色授予对象权限
2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是级联
春天的故事-Spring Security3十五日研究 春天的故事-Spring Security3十五日研究

        
Global site tag (gtag.js) - Google Analytics