i have log on with james..he can see all database names and logins ( he can not able to access)..he can acess system databases..even user can query system databases
Is that a problem? As you said, he can't actually access those databases and logins. He may be able to query system databases, but he'll only see things he has permissions on. For example, he won't get a full result set from sys.server_principals. Like I said, he'll still be able to do everything that the public role can do.
how can i restrict?? is it secured..??
That depends on how secure you need it to be. If necessary, you can remove permissions from public, or you can revoke or deny server level permissions from james.
if i run above query then the user can not see any databases including the database which he has acces to only view
Does that matter? He can still run queries against the view. Do you actually need him to be able to see it in Object Explorer as well?